这是我参与「第五届青训营 」伴学笔记创作活动的第3天。
一、基本语法
func 函数名 (形参列表) (返回值类型列表) {
执行语句...
return + 返回值列表
}
如果返回值只有一个,括号可以省略。
二、函数名
首字母大写,该函数可以被本包文件和其他包文件使用(public)。
首字母小写只能被本包文件使用(private)。
三、函数返回值
对于有多个返回值的函数,可以用 _ 不接收其中一些返回值。
sum, _ := cal(10, 20)
四、重载
函数名相同,形参列表不同称为重载。Go语言不支持重载。
五、可变参数
使用...,可以传入 0~n 任意多个数量的变量。
func test (args...int){
}
func main(){
test()
test(3)
test(1, 10, 32)
}
在函数内部处理可变参数时,将参数当作切片处理。
六、参数传递
基本数据类型和数组都是值传递,即进行拷贝。
结构体也是值传递,说明切片也是拷贝。
七、切片
切片的三种创建方式:
1.var 切片名 []数据类型
2.切片名 := []类型{}
3.使用make()创建
len(s)返回长度,cap(s)返回容量。
八、函数也是一种数据类型
可以将函数赋值给一个变量,该变量就是一个函数类型的变量,通过变量可以对函数调用。
func test(num int){
}
func main(){
a := test
fmt.Printf("a的类型是:%T, test函数的类型是:%T", a, test)
test(10)
a(10)
}
函数可以作为参数传递。
func test2(num int, testFunc func(int)){
}
九、自定义数据类型
type 自定义类型名 数据类型
type myInt int
type myFunc func(int)
但myInt和int变量之间不能直接赋值,要强制类型转换。
十、函数返回值命名
传统写法:
func test1(a int, b int)(int, int){
result1 := a + b
result2 := a - b
return a, b
}
新写法:使得return中不需要对应返回值列表的顺序。
func test2(a int, b int)(sum int, sub int){
sub := a - b
sum := a + b
return
}