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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

通過(guò) for 循環(huán)的 goroutine 通道

通過(guò) for 循環(huán)的 goroutine 通道

Go
達(dá)令說(shuō) 2021-10-18 11:08:30
我的main函數(shù)從文件中讀取 json,將其解組為結(jié)構(gòu)體,將其轉(zhuǎn)換為另一種結(jié)構(gòu)體類(lèi)型并通過(guò)標(biāo)準(zhǔn)輸出輸出格式化的 JSON。我正在嘗試實(shí)現(xiàn) goroutines 和通道來(lái)為我的for循環(huán)添加并發(fā)性。func main() {    muvMap := map[string]string{"male": "M", "female": "F"}    fileA, err := os.Open("serviceAfileultimate.json")    if err != nil {        panic(err)    }    defer fileA.Close()    data := make([]byte, 10000)    count, err := fileA.Read(data)    if err != nil {        panic(err)    }    dataBytes := data[:count]    var servicesA ServiceA    json.Unmarshal(dataBytes, &servicesA)    var servicesB = make([]ServiceB, servicesA.Count)    goChannels := make(chan ServiceB, servicesA.Count)    for i := 0; i < servicesA.Count; i++ {        go func() {            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Address").SetString(Merge(&servicesA.Users[i].Location))            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Date_Of_Birth").SetString(dateCopyTransform(servicesA.Users[i].Dob))            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Email").SetString(servicesA.Users[i].Email)            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Fullname").SetString(Merge(&servicesA.Users[i].Name))            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Gender").SetString(muvMap[servicesA.Users[i].Gender])            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Phone").SetString(servicesA.Users[i].Cell)            reflect.ValueOf(&servicesB[i]).Elem().FieldByName("Username").SetString(servicesA.Users[i].Username)            goChannels <- servicesB[i]        }()    }    for index := range goChannels {        json.NewEncoder(os.Stdout).Encode(index)    }}它編譯但返回如下消息:goroutine 1 [chan receive]: main.main() C://.....go.94 +0x55b.
查看完整描述

1 回答

?
陪伴而非守候

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

您正在打印頻道信息,而不是它包含的數(shù)據(jù)。你不想要一個(gè)循環(huán),你只想接收然后打印。


   json := <-index

   json.NewEncoder(os.Stdout).Encode(json)

現(xiàn)在我需要指出的是,該代碼不會(huì)阻塞。如果您想繼續(xù)閱讀直到所有工作完成,您需要某種鎖定/協(xié)調(diào)機(jī)制。


你會(huì)經(jīng)??吹筋?lèi)似的東西


for {

   select {

        case json := <-jsonChannel:

            // do stuff

        case <-abort:

            // get out of here 

   }

}

去處理那個(gè)。此外,僅供參考,您正在使用默認(rèn)容量(意味著它是一個(gè)緩沖的頻道)初始化您的頻道,這很奇怪。我建議查看有關(guān)該主題的一些教程,因?yàn)榭傮w而言,您的設(shè)計(jì)需要一些工作,實(shí)際上是對(duì)非并發(fā)實(shí)現(xiàn)的改進(jìn)。最后,您可以找到一些庫(kù)來(lái)為您抽象這些工作,大多數(shù)人可能會(huì)建議您這樣做。這是一個(gè)例子;https://github.com/lytics/squaredance


查看完整回答
反對(duì) 回復(fù) 2021-10-18
  • 1 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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