go:函数
程序员文章站
2022-09-04 22:08:04
1.声明语法 func 函数名 (参数列表) (返回值) { pass } 1.func add() { pass } 2.func add(a int, b int) (int,int) { pass } 3.func add(a,b int,args...) int { pass } 4.匿名函 ......
1.声明语法
func 函数名 (参数列表) (返回值) {
pass
}
1.func add() {
pass
}
2.func add(a int, b int) (int,int) {
pass
}
3.func add(a,b int,args...) int {
pass
}
4.匿名函数
func() {
fmt.printf("func 1\n")
}()
func(x int) {
fmt.printf("func 2, x is %d\n", x)
}(2)
a := func(a,b int) int {
return a+b
}(10,20)
5.函数可以作为变量赋值/作为参数传入
1)作为变量赋值
func add(a,b int) int {
return a + b
}
func main() {
c := add
sum := c(10,20)
fmt.println(sum) // 30
}
2)作为参数传入
type add_func func(int , int) int //定义一种类型。add_func类型 参数两个int变量返回值为int
func add(a,b int) int {
return a + b
}
func operate(op add_func,a int, b int ) int {
return op(a+b)
}
func main(){
c := add
sum := operate(c,100,200)
fmt.println(sum) //300
}
2.参数传递方式
1)值传递
2)引用传递 //值所在内存的地址
注意:
无论是值传递还是引用传递,传递给函数的都是变量的副本(也就是深copy一份传递过去)。不过,值传递是值的拷贝,引用传递是地址的拷贝。
map、slice、chan、指针、interface默认为引用的方式传递
3.命名返回值的名字:
package main
import "fmt"
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
return
}
func main() {
_, sum := calc(100, 200)
fmt.println("sum=", sum)
}
4.defer用途
1)当函数返回时,执行defer语句。
2)多个defer语句,按先进后出执行(实际是将defer语句的参数和资源压栈,函数结束时根据出栈顺序执行)
3)defer语句的变量,在defer声明时就决定了
package main
import "fmt"
func main() {
i := 0
defer fmt.println(i) //0
i = 10
fmt.println(i) //10
/*
10
0
*/
}
上一篇: defer 链如何被遍历