Go 学习笔记5-Go函数
目录
函数在 Go 语言中属于“一等公民”,拥有“一等公民”待遇的语法元素可以存储在变量中,可以作为参数传递给函数,可以在函数内部创建并可以作为返回值从函数返回。
1,函数的定义
Go 函数样式:
函数的变量声明形式:
在 Go 语言中,每个函数声明所定义的函数,仅仅是对应的函数类型的一个实例,即函数也是变量,函数名就是变量名,等号后边就是对应的函数的类型。
比如上面函数的类型就是:
func(io.Writer, string, ...interface{}) (int, error)
...
是 Go 中的变长参数,变长参数是通过切片来实现的。所以,在函数体中,就可以使用切片支持的所有操作来操作变长参数。
Go 语言支持函数多返回值:
func foo() // 无返回值
func foo() error // 仅有一个返回值
func foo() (int, string, error) // 有 2 或 2 个以上返回值
func foo() func() // 函数的返回值类型是一个函数
func foo(func()) // 函数的参数类型是一个函数
函数返回值可以声明变量名,这种带有名字的返回值被称为具名返回值,其可以像函数体中声明的局部变量一样在函数体内使用。
Go 标准库以及大多数项目代码中的函数,都选择了使用普通的非具名返回值形式。但在一些特定场景下,具名返回值也会得到应用。
比如,当函数的返回值个数较多时,每次显式使用 return 语句时都会接一长串返回值,这时,我们用具名返回值可以让函数实现的可读性更好一些。
基于函数自定义类型
// $GOROOT/src/net/http/server.go
type HandlerFunc func(ResponseWriter, *Request)
// $GOROOT/src/sort/genzfunc.go
type visitFunc func(ast.Node) ast.Visitor
2,设计健壮函数的三原则
- 不要相信任何外部输入的参数:对输入做合法性校验
- 不要忽略任何一个错误:判断每一个调用的返回值
- 不要假定异常不会发生:对可能发生异常的地方做异常处理
3,fmt.Print 函数
format 分类:
format | 含义 |
---|---|
一般类型 | |
%v |
值的默认格式,输出结构体 |
%+v |
输出结构体显示字段名 |
%#v |
输出结构体源代码片段 |
%T |
输出值的类型 |
布尔类型 | |
%t |
输出布尔类型值 |
整数类型 | |
%b |
输出标准的二进制格式化 |
%c |
输出对应的unicode码的一个字符 |
%d |
输出标准的十进制格式化 |
%o |
输出标准的八进制格式化 |
%q |
要输出的值是双引号输出就是双引号字符串;另外一种是自转义的 unicode 单引号字符 |
%x |
输出十六进制编码,字母形式为小写 a-f |
%X |
输出十六进制编码,字母形式为大写 A-F |
%U |
输出Unicode格式 |
浮点数与复数 | |
%b |
无小数部分、二进制指数的科学计数法 |
%e |
科学计数法(小写e) |
%E |
科学计数法(小写E) |
%f |
十进制小数 |
%F |
和 %f 一样 |
%g |
根据实际情况采用%e或%f格式(以获得更简洁、准确的输出) |
%G |
根据实际情况采用%E或%F格式(以获得更简洁、准确的输出) |
字符串和 []byte | |
%s |
输出字符串 |
%q |
源代码中那样带有双引号的输出 |
%x |
每个字节用两字符十六进制数表示(使用a-f) |
%X |
每个字节用两字符十六进制数表示(使用A-F) |
指针 | |
%p |
输出十六进制,并加上前导的 0x |
(完。)
文章作者 @码农加油站
上次更改 2022-06-09