golang中闭包的意义是什么

  介绍

这篇文章将为大家详细讲解有关golang中闭包的意义是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>什么是闭包吗?

去函数可以是一个闭包,闭包是一个函数的值,它引用了函数体之外的变量。这个函数可以对这个引用的变量进行访问和赋值,换句话说这个函数被“绑”定在这个变量上。

我的不靠谱的理解,<强>一个闭包相当于一个类的实例,函数体之外的变量相当于这个实例存储的变量。

没有闭包的时候,函数就是一次性买卖,函数执行完毕后就无法再更改函数中变量的值(应该是内存释放了);有了闭包后函数就成为了一个变量的值,只要变量没被释放,函数就会一直处于存活并独享的状态,因此可以后期更改函数中变量的值(因为这样就不会被去给回收内存了,会一直缓存在那里)。

闭包的主要意义

缩小变量作用域,减少对全局变量的污染。下面的累加如果用全局变量进行实现,全局变量容易被其他人污染。同时,所有我要实现n个累加器,那么每次需要n个全局变量。利用背的包,每个生成的累加器<代码> myAdder1, myAdder2:=加法器(),加法器()有自己独立的金额,金额可以看作为myAdder1.sum与myAdder2。求和。

利用背包可以实现<强>有自身状态的函数强壮!

package  mainimport  (   “fmt") func 加法器(),func (int), int  {   sum :=0   return  func (x  int), int  {   +=sum  x return }} func 总和;主要(),{   myAdder :=,加法器()//,从1加到10   for 小姐::=,1,,小姐:& lt;=, 10;,我+ +,{   myAdder(我)   }      fmt.Println (myAdder (0))//,再加上45   fmt.Println (myAdder (45)}

结果:

55//,1 +…+ 10   100

<>强例子

利用闭包实现斐波拉契数列

package  mainimport  (   “fmt") func 斐波纳契(),func (), int  {   b0 :=0   b1 :=1   return  func (), int  {   tmp :=, b0  + b1   b0 =, b1   b1 =, tmp return  b1}} func 主要(),{   myFibonacci :=,斐波纳契()   for 小姐::=,1,,小姐:& lt;=, 5;,我+ +,{   fmt.Println (myFibonacci ())   }}

结果:

1   2   3.   5   8

<>强易错点

func  B(),()函数(),{   b :=, ([] func (),, 3,, 3)   for 小姐::=,0;,小姐:& lt;, 3;,我+ +,{   b[我],=,func (), {   fmt.Println(我)   }   }   return  b} func  main (), {   c :=, B ()   c [0] ()   c [1] ()   c [2] ()}

结果:

//,因为都引用我,我最后变成了3   3.   3.   3

改正方法1:

package  mainimport  (   “fmt") func  B(),()函数(),{   b :=, ([] func (),, 3,, 3)   for 小姐::=,0;,小姐:& lt;, 3;,我+ +,{   j :=我   b[我],=,func (), {   fmt.Println (j)   }   }   return  b} func  main (), {   c :=, B ()   c [0] ()   c [1] ()   c [2] ()}

改正方法2:

package  mainimport  (   “fmt") func  B(),()函数(),{   b :=, ([] func (),, 3,, 3)   for 小姐::=,0;,小姐:& lt;, 3;,我+ +,{   b[我],=,func (j  int), func () {   return  func (), {   fmt.Println (j)   }   }(我)   }   return  b} func  main (), {   c :=, B ()   c [0] ()   c [1] ()   c [2] ()}

关于“golang中闭包的意义是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

golang中闭包的意义是什么