Go语言基础——函数| 青训营

52 阅读2分钟

计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个可以把参数值带入程序的入口和一个获得返回值的出口。

函数参数与返回值

函数能够接收参数,也可以返回零个或多个值。相比于 C、C++、Java 和 C#,多值返回是 Go 的一大特性。

按值传递和按引用传递

Go 默认使用按值传递来传递参数,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量。

func f(x){
    // 函数体
}

如果希望函数可以直接修改参数的值,则需要将参数的地址(变量名前面添加 & 符号)传递给函数,这就是按引用传递,此时传递给函数的是一个指针。

func f(&y){
    // 函数体
}

命名返回值

命名返回值作为结果形参被初始化为相应类型的零值,当需要返回的时候,我们只需要一条简单的不带参数的 return 语句。即使只有一个命名返回值,也需要使用 () 括起来.

使用非命名返回值的情况,当需要返回多个非命名返回值时,需要使用 () 把它们括起来。

func f(input int)(int,int){//命名返回值
     return 2 * input, 3 * input
}

func f1(input int)(x1 int,x2 int){//非命名返回值
     x2 = 2 * input 
     x3 = 3 * input 
     // return x2, x3 
     return
}
//以上两个函数结果相同

函数类型

函数变量的类型通过参数类型和返回值的类型确定。如果两个函数的参数列表和返回值列表都是相同的,那么两个函数的类型就是相同的,但两个函数不同。

带有函数名的函数

//定义一个函数
func 函数名(参数列表) (返回值列表){
   // 函数体
}

也可以用下面方式定义函数

var m func (x int, y int) (z int, p int)
var m func (_ int, _ int) (_ int, _ int)
//与func(int,int)(int,int)是同一类型

参数列表必须用一对小括号括起来,即使此列表为空。

匿名函数

func(参数列表) (返回值列表) { 
     // 函数体 
}

GO内置函数

名称说明
close用于管道通信
len返回某个类型的长度或数量(字符串,数组,切片,map通道)
cap用于返回某个类型的最大容量(只能用于切片和map)
new用于分配内存,用于值类型和用户定义的类型
make用于分配内存,用于内置引用类型(切片、map 和管道)
copy、append用于复制和连接切片
panic、recover用于错误处理机制
print、println底层打印函数,在部署环境中建议使用 fmt 包
complex、real、imag用于创建和操作复数