前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Go】闭包函数

【Go】闭包函数

作者头像
Regan Yue
发布2021-09-16 11:07:42
2820
发布2021-09-16 11:07:42
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog

改进前程序

代码语言:javascript
复制
package main

import "fmt"

func main() {
	var p2,progress int
	//获得武松和鲁达各自的“闭包内层函数”
	//闭包的作用是保存“各自的内层函数状态”
	f1 := GetDoTaskFunc()
	f2 := GetDoTaskFunc()
	//交错的执行任务
	progress = f1("武松",13)
	p2 = f2("鲁达",12)
	progress = f1("武松",13)
	p2 = f2("鲁达",13)
	progress = f1("武松",1)
	p2 = f2("鲁达",13)
	//查看各自的状态
	//各自的任务被保存在各自的闭包中
	fmt.Print("鲁达的进度说:",p2)
	fmt.Println("二哥的进度是",progress)


	//f1 := GetDoTaskFunc()
}

func GetDoTaskFunc() func(name string,hours int) (progress int) {
	var progress int = 0
	f := func(name string,hours int) int {
		fmt.Printf("%s头领带队行军%d的小时\n",name,hours)
		progress += hours
		return progress
	}
	return f
}

改进后程序

代码语言:javascript
复制
package main

import "fmt"

func main() {
	tf1 := GetTaskFunc("武松")
	tf2 := GetTaskFunc("李逵")

	p1 := tf1(13)
	p2 := tf2(14)
	p1 = tf1(10)
	p2 = tf2(18)
	fmt.Println("武松的进度:",p1)
	fmt.Println("李逵的进度:",p2)
}

func GetTaskFunc(name string) func(hours int) (progress int) {
	var progress = 0
	ExcuteTask := func(hours int) int {
		fmt.Printf("%s带队行军%d小时\n", name, hours)
		progress += hours
		return progress
	}
	return ExcuteTask
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 改进前程序
  • 改进后程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档