• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

示例如下:

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Docker和Kubernetes用Go语言又怎样?| 王垠专栏发布时间:2022-07-10
下一篇:
Go入门笔记40-leveldb相关的库发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap