函数是构建程序的基础部件,定义如下:
type mytype int
func (p mytype) funcname(q int) (r, s int) {return 0,0}
关键字func用于定义一个函数
函数可以绑定到特定的类型上,叫做“接收者”,以后会详细介绍。
funcname是自己定义的函数名称
int类型的变量p是输入参数,传值引用,会被复制。
r和s是这个函数的 命名返回值,可以只有类型,也可以没有返回值。
函数体只有一个return语句,返回两个值
1. 作用域
定义在函数外部的变量是全局变量,定义在函数内部的变量是局部变量。如果命名覆盖-一个局部变量与一个全局变量有相同的名字,那么在该函数执行的时候,局部变量会覆盖全局变量。
2. 多值返回
Go的函数和方法可以返回多个值,元组没有座位原生类型出现,所以多返回值可能是最佳的选择。
3. 命名返回值
Go的格言:用更少的代码做更多的事。
函数的返回值可以指定一个名字,并且像原始的变量那样使用,就像输入参数一样。
如果对其命名,在函数开始时,会用其类型的零值初始化。
名字不是强制的。
4. 延迟代码
在defer后指定的函数会在函数退出前调用。
延迟的函数是按照先进后出FILO的顺序执行。
利用defer甚至可以修改返回值。
5. 变参
接受不定数量的参数的函数叫做变参函数,例如:
func myfunc(arg …int) {}
变量arg是一个int类型的slice,这些参数的类型全部都是int。
6. 函数作为值
函数可以赋值给变量,可以在其他地方被调用。
7. 回调
函数作为参数可以在另外一个函数里被调用。
8. 恐慌和恢复
Panic:是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中,但函数F调用panic,函数F的执行被中断,并且F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一过程继续向上,直到程序崩溃时所有goroutine返回。
Recover:是一个内建函数,可以让进入令人恐慌的流程中得gorountine恢复过来。recover仅在延迟函数中有效。在正常的执行过程中,调用recover会返回nil并且没有其他任何效果。如果当前的gorountine陷入恐慌,调用recover可以捕获到panic的输入值,并且恢复正常的执行。
本文仅记录了一些自认为比较重要的信息,原书中有许多代码的例子和讲解,更为详细。