函数类型
-
函数声明本质上是定义了函数类型的变量
package main import "fmt" // 定义了函数,本质上是在全局作用域中声明了一个函数类型的变量 info 其类型为 `func ()` func info() { fmt.Println("beimenchuixue") } // 等价于 结果上完全等价 info函数 <=> infoVar函数 var infoVar = func() { fmt.Println("beimenchuixue") } func main() { // 触发名称查找,首先找当前作用域,然后按作用域上下文向上找,全局作用域中找到了 info info() // 打印函数变量的类型 fmt.Printf("函数变量:%T", info) }
-
既然函数类型和基本类型一致,那么其具有普通变量的行为(作为参数或返回值)
package main import "fmt" // 函数类型 func funcType(name string, t string) (info string) { info = name + "-" + t return } //作为普通参数 func one(join func(string, string) string, n, t string) string{ return join(n, t) } func main() { // 函数作为普通参数 res := one(funcType, "age", "int") fmt.Println(res) }