登录
首页 >  Golang >  Go问答

将参数传递给函数闭包

来源:Golang技术栈

时间:2023-04-04 14:19:22 304浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《将参数传递给函数闭包》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我试图了解 Go 中创建带参数的匿名函数与让该函数充当闭包之间的区别。这是差异的示例。

带参数:

func main() {
  done := make(chan bool, 1)
  go func(c chan bool) {
    time.Sleep(50 * time.Millisecond)
    c 

作为闭包:

func main() {
  done := make(chan bool, 1)
  go func() {
    time.Sleep(50 * time.Millisecond)
    done 

我的问题是,第一种形式何时比第二种形式更好?你会为这种事情使用参数吗?我唯一能看到第一种形式有用的是func(x, y)从另一个函数返回 a 时。

正确答案

使用闭包与使用函数参数之间的区别在于共享相同的变量与获取值的副本。考虑下面这两个例子。

闭包 中,所有函数调用都将使用存储在i. 在任何 goroutine 有时间打印它的值之前,这个值很可能已经达到 3。

Parameter 示例中,每个函数调用都将获得调用时值的副本i,从而为我们提供更可能想要的结果:

关闭:

for i := 0; i 

结果:

3
3
3

范围:

for i := 0; i 

结果:

0
1
2

游乐场: http ://play.golang.org/p/T5rHrIKrQv

本篇关于《将参数传递给函数闭包》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>