函数的基本写法
func add(a int, b int) int {
return a + b
}
如果2个参数的类型一样,可以简写为
func add(a, b int) int {
return a + b
}
多个返回值
func add_substract(a int, b int) (int, int) {
return a + b, a - b
}
忽略多个返回值中的某一个
func add_substract(a, b int) (int, int) {
return a + b, a - b
}
n1, _ := add_substract(3, 4)
定义函数类型
func add(a int, b int) int {
return a + b
}
func sub(a, b int) int {
return a - b
}
type Cal func(int, int) int
func do(f Cal, a, b int) int {
return f(a, b)
}
func main() {
n1 := do(add, 3, 5)
n2 := do(sub, 5, 3)
fmt.Println("n1 =", n1)
fmt.Println("n2 =", n2)
}
不定参数的场景
不定参数函数的形参可以为不定参数,或者为切片。
但是这是2种不同的函数类型。
func get_sum(data ...int) {
sum := 0
for _, v := range data {
sum += v
}
fmt.Println(sum)
return
}
func main() {
fmt.Println("Hello World!")
get_sum(1, 2, 3)
slice := make([]int, 3)
slice[0] = 1
slice[1] = 2
get_sum(slice...)
}
运行结果
Hello World! 6 3 成功: 进程退出代码 0.
defer函数
defer函数的主要作用为了保证资源的回收和释放。
当defer函数放在return之后时,不会被执行。
当defer函数所在的程序调用了os.Exit(),不管是Exit(0),Exit(1),defer都不会被执行。
defer函数后面的()里面是为了放实参的。
func main() {
fmt.Println("Hello World!")
defer func(x int) {
fmt.Println("defer x=", x)
}(1)
fmt.Println("test end")
// os.Exit(0)
os.Exit(1)
}
运行结果
Hello World! test end exit status 1 错误: 进程退出代码 1.
多个defer函数放在一起,最后的defer先执行。(defer充分贯彻落实FILO)
大道至简

浙公网安备 33010602011771号