函数
Go里面有三种类型的函数
普通带有名字的函数
匿名函数或者lambda函数
方法
main()、init()函数没有参数和返回值。
参数、返回值被统称为函数签名。
大括号必须这样
func g() {
}
函数重载在Go内不被允许。
如果需要声明一个在外部被定义的函数,只需要给出函数名和函数签名,不需要给出函数体。
定义一个自定义函数类型
type binOp func(int, int) int
函数是一等值
add := addnum
add(1,15)
函数值进行比较时,引用的是相同函数或者都为nil,则为true。
命名返回值
func kkk() (a int)
return
return 的时候会把a直接返回,a在函数调用的时候就已经定义了。
空白符_ 接受一个返回值,但是不使用,直接扔了。
传递变长参数
myFunc( num ...int)
实际上就是一个数组
muFunc(1,2,3,4)(调用)
nums := []int{1,2,3,4,5}
muFunc(nums...)//传入一个列表(数组),变长参数
defer
在函数return执行。
defer my(a,b)
如果一个函数内有多个defer,则根据定义顺序反序执行,因为它用的是一个栈。。。
defer后的函数常常是对文件的处理,流的关闭等等
内置函数:
Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。
以下是一个简单的列表,我们会在后面的章节中对它们进行逐个深入的讲解。
名称 说明
close 用于管道通信
len、cap len 用于返回某个类型的长度或数量(字符串、数组、切片、map 和管道);cap 是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
new、make new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针(详见第 10.1 节)。它也可以被用于基本类型:v := new(int) 。make(T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作(详见第 7.2.3/4 节、第 8.1.1 节和第 14.2.1 节)new() 是一个函数,不要忘记它的
copy、append 用于复制和连接切片
panic、recover 两者均用于错误处理机制
print、println 底层打印函数(详见第 4.2 节),在部署环境中建议使用 fmt 包
complex、real imag 用于创建和操作复数(详见第 4.5.2.2 节)
递归函数:
函数自身调用自身,
也可以是多个函数彼此调用,形成递归,A调用B,B调用A,在某一条件下跳出。
函数作为参数传入
func add(a int,b int)(num int)
k := add
myfunc(1,211,k)或者是myfunc(a,211,add)
闭包(匿名函数):
函数返回时 return func(参数列表)(返回值列表){函数体}
闭包可以使用定义它的函数内的局部变量。且,可以看作就是它的变量。
而且,在外部函数退出之后依旧可以使用,(cp了吧)