第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

作為 goroutines 啟動的 3 個不同的 func 產(chǎn)生相同的 goroutine

作為 goroutines 啟動的 3 個不同的 func 產(chǎn)生相同的 goroutine

Go
慕尼黑5688855 2021-11-29 19:32:59
對于 3 個不同且不同的“c”for _, c := range u.components { // u.components has 3 members    fmt.Printf("%v %v", c.name, c.channel) // prints 3 distinct name/channel pairs     go c.Listen(); // a method of c that listens on channel c.channel}...啟動 3 個相同的 goroutine,其中 c.name 和 c.channel 是相同的。長版(注釋,短代碼):https : //play.golang.org/p/mMQb_5jLjm這是我的第一個 Go 程序,我確定我遺漏了一些明顯的東西。有任何想法嗎?謝謝你。
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經(jīng)驗 獲得超9個贊

c.Listen()對 c的調(diào)用正在關(guān)閉 c 的值,該值通過指向 的指針傳遞Listen,并且每次迭代都會更改該值。如果將方法調(diào)用視為方法表達式,則更容易形象化


go (*component).Listen(&c)

https://golang.org/doc/faq#closures_and_goroutines


在每次迭代時為 c 創(chuàng)建一個新值,以防止前一個被覆蓋:


for _, c := range u.components { // u.components has 3 members

    c := c

    fmt.Printf("%v %v", c.name, c.channel) // prints 3 distinct name/channel pairs 

    go c.Listen(); // a method of c that listens on channel c.channel

}

或者直接使用切片中包含的值:


for i := range u.components {

    go u.components[i].Listen()

}


查看完整回答
反對 回復(fù) 2021-11-29
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號