Go语言函数是Go语言编程中的一个重要概念,它是一种可以在Go语言程序中重复使用的代码块。函数可以接受参数,并返回一个或多个值。函数的定义格式如下:
func function_name( [parameter list] ) [return_types] { 函数体 }
其中,function_name 是函数名;parameter list 是参数列表,由逗号分隔的形式参数组成;return_types 是函数返回值的类型列表,如果没有返回值则省略此项。Go语言中的函数也有特性,例如多返回值、命名返回值、可变长度参数、闭包、匿名函数、defer 等。
多返回值是 Go 语言特有的特性之一。在 Go 语言中,函数有时会返回多个值。例如 fmt.Println() 函数就会返回一个 int 类型的 n 和 error 类型的 err 两个值。在使用时需要将多个返回值用括号括起来并使用逗号分隔开来。
n, err := fmt.Println("Hello World")
命名返回值是 Go 语言特有的特性之二。在 Go 语言中,我们不仅能够定义函数的形式参数,而且能够定义函数的命名返回值。命名返回和形式参数定义方法相似,都是在函数声明时把形式上要传入或者传出的内容声明好即可。
func add(x int, y int) (sum int) { // 定义 sum 作为命名返回 sum = x + y return }
Go 语言中允许使用不定长度的形式参数来声明一个函数。不定长度形式参数必须位于形式参数列表末尾并以 ... 符号标识。不定长度形式参
相关方法:
func (r *Response) WriteJson(content interface{}) error
func (r *Response) WriteJsonExit(content interface{}) error
func (r *Response) WriteJsonP(content interface{}) error
func (r *Response) WriteJsonPExit(content interface{}) error
func (r *Response) WriteXml(content interface{}, rootTag ...string) error
func (r *Response) WriteXmlExit(content interface{}, rootTag ...string) error
Response
提供了对JSON/XML
数据格式输出的原生支持,通过以下方法实现:
WriteJson*
方法用于返回JSON
数据格式,参数为任意类型,可以为string
、map
、struct
等等。返回的Content-Type
为application/json
。
WriteXml*
方法用于返回XML
数据格式,参数为任意类型,可以为string
、map
、struct
等等。返回的Content-Type
为application/xml
。对JSON
数据格式支持的同时,同时也支持JSONP
协议。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.ALL("/json", func(r *ghttp.Request) {
r.Response.WriteJson(g.Map{
"id": 1,
"name": "john",
})
})
})
s.SetPort(8199)
s.Run()
}
执行后,我们通过curl
工具测试下:
$ curl -i http://127.0.0.1:8199/json
HTTP/1.1 200 OK
Content-Type: application/json
Server: GF HTTP Server
Date: Sun, 05 Jan 2020 02:49:31 GMT
Content-Length: 22
{"id":1,"name":"john"}
需要注意使用JSONP
协议时必须通过Query
方式提供callback
参数。
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.ALL("/jsonp", func(r *ghttp.Request) {
r.Response.WriteJsonP(g.Map{
"id": 1,
"name": "john",
})
})
})
s.SetPort(8199)
s.Run()
}
执行后,我们通过curl
工具测试下:
$ curl -i "http://127.0.0.1:8199/jsonp?callback=MyCallback"
HTTP/1.1 200 OK
Server: GF HTTP Server
Date: Sun, 05 Jan 2020 02:50:42 GMT
Content-Length: 34
Content-Type: text/plain; charset=utf-8
MyCallback({"id":1,"name":"john"})
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.ALL("/xml", func(r *ghttp.Request) {
r.Response.Write(`<?xml version="1.0" encoding="UTF-8"?>`)
r.Response.WriteXml(g.Map{
"id": 1,
"name": "john",
})
})
})
s.SetPort(8199)
s.Run()
}
执行后,我们通过curl
工具测试下:
$ curl -i http://127.0.0.1:8199/xml
HTTP/1.1 200 OK
Content-Type: application/xml
Server: GF HTTP Server
Date: Sun, 05 Jan 2020 03:00:55 GMT
Content-Length: 76
<?xml version="1.0" encoding="UTF-8"?><doc><id>1</id><name>john</name></doc>
有时,我们要为整个应用添加依赖项。通过与定义路径装饰器依赖项类似的方式,可以把依赖项添加至整个FastAPI应用。这样一来,就...
你可以向FastAPI应用添加中间件."中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作.它接收...
即插视图可以像常规函数一样用route()或更好的add_url_rule()附加到应用中。然而当你附加它时,你必须 提供 HTTP 方法的名称。为...
要定义一个多对一关联,使用 ForeignKey:from django.db import modelsclass Reporter(models.Model):first_name = models.C...
迁移以磁盘格式存储,这里称为“迁移文件”。这些文件实际上是普通的 Python 文件,具有约定的对象布局,以声明式风格编写。基本...