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

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

沒有看到 goroutines 的預(yù)期副作用

沒有看到 goroutines 的預(yù)期副作用

Go
尚方寶劍之說 2021-09-27 21:23:21
我正在嘗試了解 goroutines。拿這個代碼:package mainimport "fmt"var (    b1 []float64    b2 []float64)func main() {    go fill(&b1, 10)    go fill(&b2, 10)    fmt.Println(b1,b2)    var s string    fmt.Scanln(&s)}func fill(a *[]float64, n int) {    for i:=0; i<n; i++ {        *a = append(*a, rand.Float64()*100)    }}如您所見,我正在嘗試填充兩個切片。但是當(dāng)以這種方式運行時(使用go fill()),它會打印兩個空切片。為什么這不起作用?
查看完整描述

1 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊

在您使用sync.WaitGroup、通道或其他機(jī)制明確等待它們之前,您啟動的任何 goroutine 都不能保證已經(jīng)完成(甚至開始!)。這有效:


package main


import (

    "fmt"

    "math/rand"

    "sync"

)


var (

    b1 []float64

    b2 []float64

)


func main() {

    wg := new(sync.WaitGroup)

    wg.Add(2)

    go fill(&b1, 10, wg)

    go fill(&b2, 10, wg)

    wg.Wait()


    fmt.Println(b1)

    fmt.Println(b2)

}


func fill(a *[]float64, n int, wg *sync.WaitGroup) {

    for i := 0; i < n; i++ {

        *a = append(*a, rand.Float64()*100)

    }

    wg.Done()

}

(只是說話的風(fēng)格,如果是我的話我會想辦法讓這個函數(shù)返回擴(kuò)大切片所以它類似于append()本身,而Go的代碼審查意見建議傳遞價值觀,但在所有非常規(guī)的它不是延長為指針經(jīng)過切片接收器(“這個”)參數(shù)。)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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