go语言中的闭包结构
生活随笔
收集整理的這篇文章主要介紹了
go语言中的闭包结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每次調用 increment都會重新生成一個閉包結構中的變量
內層函數+外層函數局部變量(可以是入參或者定義的局部變量) = 閉包結構
go中閉包的使用實例:
package mainimport "fmt"/* 每次調用 increment都會重新生成一個閉包結構中的變量 內層函數+外層函數局部變量(可以是入參或者定義的局部變量) = 閉包結構如果將一個內層函數作為函數返回值 內層函數中又涉及到外層函數的局部變量(自己定義或者外部傳進來的參數,都是局部變量) 1+2 條件滿足后,就會導致該局部變量的聲明周期發生改變,外層函數的局部變量不會隨著外層函數的借宿而銷毀 這種內層函數變量和外層局部變量,統稱為閉包結構 閉包結構中,局部變量的聲明周期會發生改變 */// 老的函數接口,只能接受沒有參數 func oldFun(f func()) {fmt.Println("this is f1")f() }// 新的接口 func newFun(x, y int) {fmt.Println("this is f2")fmt.Print(x+y) }//使用閉包接口可以實現將新接口,轉換為老接口 //使用特性 閉包結構 func closureFun(f func(int, int), x, y int) func() {// 閉包結構中, x y 變量的生命周期已經發生改變,在任何調用匿名函數的地方//都可以得到 x, y 的值,從而實現,在oldFun函數調用匿名函數的時候,壓棧,調到函數newFun的時候,依舊能獲取到 x y的值fmt.Println("closure func")tmp := func() {fmt.Println("closure tmp func")f(x, y)}return tmp }func main() {// 匿名函數,立即執行函數func(x, y int){fmt.Println(x+y)}(1,2)// 閉包fmt.Println("-------------closure func--------------")fakeOldFun := closureFun(newFun, 2,3)oldFun(fakeOldFun)}總結
以上是生活随笔為你收集整理的go语言中的闭包结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机组成原理】零碎知识归纳总结
- 下一篇: 【项目管理】项目干系人