值类型:数值型系列,字符串,bool,数值,结构体
引用类型:slice,map,接口,channel,指针
那么问题来了:函数属于什么类型?
先下结论:函数是引用类型。
论证:
package main
import "fmt"
type testFun func(int32) int32
func A(a int32) int32 {
return a + int32(1)
}
func editFun(afun testFun) {
fmt.Printf("afun传进来的-value:%v,afun传进来的-地址:%v\n", afun, &afun)
bfun := func(a int32) int32 {
return a + 3
}
fmt.Printf("bfun-value:%v\n", bfun)
afun = bfun
fmt.Printf("afun传进来修改后的-value:%v,afun传进来修改后的-地址:%v\n", afun, &afun)
return
}
func main() {
var afun = A
fmt.Printf("afun原来的-value:%v,afun原来的-地址:%v\n", afun, &afun)
editFun(afun)
fmt.Printf("afun修改后后外层的-value:%v,afun修改后后外层的-地址:%v\n", afun, &afun)
res := afun(3)
fmt.Println(res)
}
运行结果:
afun原来的-value:0x108af40,afun原来的-地址:0xc00000e028
afun传进来的-value:0x108af40,afun传进来的-地址:0xc00000e038
bfun-value:0x108af60
afun传进来修改后的-value:0x108af60,afun传进来修改后的-地址:0xc00000e038
afun修改后后外层的-value:0x108af40,afun修改后后外层的-地址:0xc00000e028
4
说明: