Golang 语言基础之五: function
Golang 语言基础系列:
- Golang 语言基础之一: type, variable, constant
- Golang 语言基础之二: for, ifelse, switch
- Golang 语言基础之三: array, slice
- Golang 语言基础之四: map, range
- Golang 语言基础之五: function
- Golang 语言基础之六: string, pointer
- Golang 语言基础之七: struct, method
- Golang 语言基础之八: interface
- Golang 语言基础之九: error, panic, recover
- Golang 语言基础之十: goroutine, channel
函数
function
是 Golang 的核心,它的定义方式为:
func (variable Type) funcName(var1 Type1, var2 Type2, variabicPara ...TypeX) (ret1 ReturnType1, ret2 ReturnType2) { }
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
1 2 3 4 5 6 7 8 9 10 11 12 13 14
- 使用
func
关键字来定义函数。
- 如果定义时有
(variable Type)
的内容,variable
表示函数所属类型的对象,如果函数体中不需要用到则可以省略。
- 如果定义时有
(variable Type)
的内容,Type
表示函数所属的类型,Type
本身也可以是一个类型的指针,比如 struct
User 的指针 *User
。
- 函数的名称。
- 函数可以有
0
个或者多个形参,函数第一个形参的名字。
- 函数第一个形参的类型。
- 函数第二个形参的名字。
- 函数第二个形参的类型。
variabicPara ... TypeX
表示可以有可变参数,也就是是零个或者多个同一类型 TypeX
的形参,实参传递的时候放入一个名为 variabicPara
的 slice
对象中。
- 函数可以有多个返回值,第一个返回值的名称。(函数可以指定
命名返回值
,也就是说返回值名称在定义函数时确定,并初始化为各自类型的零值。它们在函数内部的使用方式和函数传递的实参是一样的。)
- 第一个返回值的类型。
- 第二个返回值的名称。
- 第二个返回值的类型。
- 函数体,在里面可以定义函数的行为。
注意,根据下面 官方文档关于分号的说明,Golang 编译器会在源代码中自动添加分号 ;
,如果 {
单独放在一行的开头,其前面可能会被加入 ;
,造成编译错误。
这个规则适用于其他流程控制语句(for, ifelse, switch, select):
注意:无论任何时候,你都不应该将一个控制结构((if、for、switch或select)的左大括号放在下一行。如果这样做,将会在大括号的前方插入一个分号,这可能导致出现不想要的结果。
而对于 struct
,interface
等类型,gofmt
会自动将左大括号 {
调整到原型声明那一行,所以无需操心。
按照本系列的惯例,还是从实际使用的例子开始:
将上面的代码存入源文件 function.go 并使用 go run function.go
可以看到下面的输入:
注释中对函数的各种用法的解释很清楚,就不多说了。关于 panic
和 recover
在函数中的用法后面会专门讨论。
参考资料
-- EOF --
有疑问加站长微信联系(非本文作者)