函数学习 | 青训营

77 阅读2分钟

学习内容

  1. 函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

  2. 形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用时提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。

  3. 函数的类型被称为函数的签名。如果两个函数形式参数列表和返回值列表中的变量类型一一对应,那么这两个函数被认为有相同的类型或签名。形参和返回值的变量名不影响函数签名,也不影响它们是否可以以省略参数类型的形式表示。

  4. 每一次函数调用都必须按照声明顺序为所有参数提供实参(参数值)。在函数调用时,Go语言没有默认参数值,也没有任何方法可以通过参数名指定形参,因此形参和返回值的变量名对于函数调用者而言没有意义。

  5. 在函数体中,函数的形参作为局部变量,被初始化为调用者提供的值。函数的形参和有名返回值作为函数最外层的局部变量,被存储在相同的词法块中。

  6. 实参通过值的方式传递,因此函数的形参是实参的拷贝。对形参进行修改不会影响实参。但是,如果实参包括引用类型,如指针,slice(切片)、map、function、channel等类型,实参可能会由于函数的间接引用被修改。

学习心得

go的函数相对于其他语言,规定更加严格,限制函数的创建以及调用,使得上手难度降低,反而避免很多书写习惯造成的bug;闭包的使用,提高了代码的复用率;更学习到了新知识defer,通过延时关闭,使得go在资源调用过程中可以任意调用资源,同时使用defer函数延迟关闭资源,避免资源浪费