• 速战速决 go go 面向对象: 函数(函数也是一种类型,匿名函数,闭包)


    速战速决 go https://github.com/webabcd/GoSample
    作者 webabcd

    速战速决 go - go 面向对象: 函数(函数也是一种类型,匿名函数,闭包)

    示例如下:

    oop/function2.go

    // go 面向对象 - 函数(函数也是一种类型,匿名函数,闭包)
    
    package oop
    
    import "fmt"
    
    func Function2Sample() {
    	function2_sample1()
    	function2_sample2()
    	function2_sample3()
    }
    
    func function2_sample1() {
    	// 函数也是一种类型(可以实现类似函数指针的效果)
    	// 下面声明了一个名为 myFunc 的变量,其类型为 func(name string) string
    	var myFunc func(name string) string
    
    	// 为函数类型的变量赋值时,要求函数的参数和返回值定义要与变量的类型相同
    	myFunc = func21
    	// 调用指针指向的函数
    	fmt.Println(myFunc("webabcd")) // func21: webabcd
    
    	// 为函数类型的变量赋值时,要求函数的参数和返回值定义要与变量的类型相同
    	myFunc = func22
    	// 调用指针指向的函数
    	fmt.Println(myFunc("webabcd")) // func22: webabcd
    }
    func func21(name string) string {
    	return "func21: " + name
    }
    func func22(name string) string {
    	return "func22: " + name
    }
    
    func function2_sample2() {
    	// 定义匿名函数
    	a := func(name string) {
    		fmt.Println("hello: " + name)
    	}
    	// 调用匿名函数
    	a("webabcd") // hello: webabcd
    
    	// 匿名函数做字典键值的示例
    	var b = map[string]func(){
    		"x": func() {
    			fmt.Println("xxx")
    		},
    		"y": func() {
    			fmt.Println("yyy")
    		},
    	}
    	b["x"]() // xxx
    	b["y"]() // yyy
    
    	// 匿名函数实现回调的示例
    	func23("webabcd", func(result string) {
    		fmt.Println(result) // hello: webabcd
    	})
    
    	// 把匿名函数的定义和调用放到一起
    	func() {
    		fmt.Println("把匿名函数的定义和调用放到一起") // 把匿名函数的定义和调用放到一起
    	}()
    }
    
    // 此函数的第 2 个参数是一个函数类型,其用于实现回调逻辑
    func func23(name string, callback func(string)) {
    	// 回调
    	callback("hello: " + name)
    }
    
    func function2_sample3() {
    	// 获取一个闭包
    	a := func24()
    
    	// 闭包引用的闭包外的变量的生命周期会拉长到与闭包一致
    	fmt.Println(a()) // 1
    	fmt.Println(a()) // 2
    	fmt.Println(a()) // 3
    }
    
    // 函数返回的函数就是一个闭包(closure)
    func func24() func() int {
    	// 闭包外的变量
    	a := 0
    	// 返回一个闭包
    	return func() int {
    		// 闭包的特性:闭包引用的闭包外的变量的生命周期会拉长到与闭包一致
    		a++
    		return a
    	}
    }
    
    

    速战速决 go https://github.com/webabcd/GoSample
    作者 webabcd

  • 相关阅读:
    vmware12中安装MAC OS X 10.10
    AOL search
    [python]错误检测及异常处理try-except
    [推荐]
    [python]打开文件操作open用法
    MAC使用小技巧
    [推荐]
    [python]python中的if, while, for
    [python]python字典
    [python]python列表、元组
  • 原文地址:https://www.cnblogs.com/webabcd/p/go_oop_function2.html
Copyright © 2020-2023  润新知