日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

php小編魚仔封閉所容納的環(huán)境范圍是指封閉環(huán)境中所包含的元素、因素和條件。封閉環(huán)境是指一個相對封閉、受限制的空間或范圍,可以是物理空間,如實驗室、工廠車間, 也可以是虛擬空間,如計算機網(wǎng)絡(luò)。在封閉環(huán)境中,各種因素如溫度、濕度、氣體組成等都可以被控制和調(diào)節(jié),以達到特定的目的。封閉環(huán)境常見于科研實驗、生產(chǎn)制造等領(lǐng)域,對于保證實驗精確性、產(chǎn)品質(zhì)量等方面起到重要作用。

問題內(nèi)容

我模仿網(wǎng)上關(guān)于閉包的教程,寫了下面的代碼。

func foo1() func() {
    xvalue := 1
    x := &xvalue
    defer func() {
        xvalue = 2
    }()
    return func() {
        *x = *x + 1
        fmt.printf("foo1 val = %d\n", *x)
    }
}

func main() {

    f1 := foo1()
    f1()
    f1()
    f1()
}

登錄后復(fù)制

我很困惑,在執(zhí)行 f1 := foo1() 后,變量 xvalue 似乎應(yīng)該被回收,因此使用 *x 應(yīng)該是錯誤的,但上面的代碼沒有錯誤并且執(zhí)行罰款,給出輸出

foo1 val = 3
foo1 val = 4
foo1 val = 5

登錄后復(fù)制

所以我想知道閉包除了保存指針本身之外還保存了指針的值還是go語言的垃圾回收機制導(dǎo)致xvalue沒有被刪除?

解決方法

在 Go 中,閉包獲取對其關(guān)閉的任何變量(的地址)的引用。引用語言參考:

函數(shù)文字是閉包:它們可以引用周圍函數(shù)中定義的變量。然后,這些變量在周圍的函數(shù)和函數(shù)文字之間共享,并且只要可訪問,它們就會一直存在。

因此,在您的示例中:

    f1 := foo1()

      使 xValue 變量存在(編譯器可能會在堆上分配它)。它將以其類型的零值 0 開始。
      使變量 x 存在并為其分配 xValue 的地址。

      defer-red 閉包運行并將值 2 分配給 xValue。
      返回一個關(guān)閉變量 x 的閉包。

    后一點可能有點棘手:由于返回的閉包引用了變量 x,編譯器保證即使在 foo 返回后該變量也存在。由于 x 包含 xValue 的地址(因此是對它的實時引用),因此該地址仍然存在,并且不能被垃圾收集。
    使用相同的轉(zhuǎn)義分析方法,編譯器保證 xValue 在其聲明的函數(shù)返回后仍然存在。

    您執(zhí)行返回的閉包,該閉包通過指向它的指針修改 xValue – 這里沒有發(fā)生任何魔法。另外兩個調(diào)用執(zhí)行相同的操作。

總而言之,也許您被 C++ 知識絆倒了,一旦從該函數(shù)返回控制權(quán),函數(shù)中聲明的任何變量都將不再存在,因此該函數(shù)外部存在的對該變量的任何引用都將變?yōu)闊o效的。在 Go 中,情況并非如此:在這方面,該語言被顯式定義為安全:編譯器確保任何變量都有適當?shù)姆峙洌员阍诜祷兀ɑ蛞云渌绞絺鬟_)對它的引用時在創(chuàng)建它的函數(shù)調(diào)用中生存下來。從該函數(shù)調(diào)用到外部世界。

分享到:
標簽:Go語言
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定