https://segmentfault.com/a/

函数是构建程序的基础部件,定义如下:
type mytype int
func (p mytype) funcname(q int) (r, s int) {return 0,0}

  • 关键字func用于定义一个函数

  • 函数可以绑定到特定的类型上,叫做“接收者”,以后会详细介绍。

  • funcname是自己定义的函数名称

  • int类型的变量p是输入参数,传值引用,会被复制。

  • r和s是这个函数的 命名返回值,可以只有类型,也可以没有返回值。

  • 函数体只有一个return语句,返回两个值

  1. 作用域 ———

定义在函数外部的变量是全局变量,定义在函数内部的变量是局部变量。如果命名覆盖-一个局部变量与一个全局变量有相同的名字,那么在该函数执行的时候,局部变量会覆盖全局变量。

  1. 多值返回 ———–

Go的函数和方法可以返回多个值,元组没有座位原生类型出现,所以多返回值可能是最佳的选择。

  1. 命名返回值 ————-

Go的格言:用更少的代码做更多的事。

  • 函数的返回值可以指定一个名字,并且像原始的变量那样使用,就像输入参数一样。

  • 如果对其命名,在函数开始时,会用其类型的零值初始化。

  • 名字不是强制的。

  1. 延迟代码 ———–

在defer后指定的函数会在函数退出前调用。

  • 延迟的函数是按照先进后出FILO的顺序执行。

  • 利用defer甚至可以修改返回值。

  1. 变参 ——-

接受不定数量的参数的函数叫做变参函数,例如:
func myfunc(arg …int) {}
变量arg是一个int类型的slice,这些参数的类型全部都是int。

  1. 函数作为值 ————-

函数可以赋值给变量,可以在其他地方被调用。

  1. 回调 ——-

函数作为参数可以在另外一个函数里被调用。

  1. 恐慌和恢复 ————-

Panic:是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中,但函数F调用panic,函数F的执行被中断,并且F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一过程继续向上,直到程序崩溃时所有goroutine返回。

Recover:是一个内建函数,可以让进入令人恐慌的流程中得gorountine恢复过来。recover仅在延迟函数中有效。在正常的执行过程中,调用recover会返回nil并且没有其他任何效果。如果当前的gorountine陷入恐慌,调用recover可以捕获到panic的输入值,并且恢复正常的执行。

本文仅记录了一些自认为比较重要的信息,原书中有许多代码的例子和讲解,更为详细。