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

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

在 Golang 中新建一個 json 編碼器類型的數組或映射

在 Golang 中新建一個 json 編碼器類型的數組或映射

Go
元芳怎么了 2021-11-29 19:30:43
我是 Golang 的新手,遇到了以下問題。// XXX a bit inefficient. could open r files and run over list oncefor r := 0; r < nreduce; r++ {    file, err = os.Create(ReduceName(fileName, JobNumber, r))    if err != nil {        log.Fatal("DoMap: create ", err)    }    enc := json.NewEncoder(file)    for e := res.Front(); e != nil; e = e.Next() {        kv := e.Value.(KeyValue)        if ihash(kv.Key)%uint32(nreduce) == uint32(r) {            err := enc.Encode(&kv)            if err != nil {                log.Fatal("DoMap: marshall ", err)            }        }    }    file.Close()}基本上,這段代碼片段在每個 for 循環(huán)迭代中創(chuàng)建一個文件,然后根據(鍵,值)對打開一個文件以對屬于該文件的內容進行編碼。然而,這段代碼效率低下,因為它掃描了這個文件太多次。更有效的方法是打開 r 文件并運行此列表文件一次。所以我想這樣寫(但我不知道怎么寫):enc_map := make(map[int]*Encode)for r := 0; r < nreduce; r++ {file. err = os.Create(ReduceName(fileName, JobNumber, r))if err != nil {    log.Fatal("DoMap: create ", err)}enc := json.NewEncoder(file)enc_map[r] = encfor e := res.Front(); e != nil; e = e.Next() {    kv := e.Value.(KeyValue)    r := ihash(kv.Key)&uint32(nreduce)     err := enc_map[r].Encode(&kv)    if err != nil {        log.Fatal("DoMap: marshall ", err)    }}此代碼片段首先創(chuàng)建一個保存 json.Encoder 對象的映射,然后遍歷此文件一次。我查看了 go 文檔,它說 json.Encoder 的類型名稱是 *Encode。但是線enc_map := make(map[int]*Encode)是錯誤的,編譯器給了我以下錯誤:../mapreduce/mapreduce.go:228: undefined: Encode../mapreduce/mapreduce.go:230: file.err undefined (type *os.File has no field or method err)../mapreduce/mapreduce.go:230: multiple-value os.Create() in single-value context那么做事的正確方法是什么?
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

json.NewEncoder(file)返回一個類型的對象*Encoder。因此,嘗試編輯該行:

enc_map := make(map[int]*Encode)

到:

enc_map := make(map[int]* json.Encoder)

消除錯誤:

../mapreduce/mapreduce.go:228: undefined: Encode

為了擺脫其他 2 個錯誤,即,

../mapreduce/mapreduce.go:230: file.err undefined (type *os.File has no field or method err)
../mapreduce/mapreduce.go:230: multiple-value os.Create() in single-value context

只需在線編輯file .err

file. err = os.Create(ReduceName(fileName, JobNumber, r))

file, err在你的代碼。

我希望這可以解決您面臨的問題。


查看完整回答
反對 回復 2021-11-29
  • 1 回答
  • 0 關注
  • 330 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號