Go-数据类型-函数

函数类型

  • 函数声明本质上是定义了函数类型的变量

    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)
    }
    
posted @ 2020-12-09 23:32  梦_鱼  阅读(72)  评论(0编辑  收藏  举报