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

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

io.Reader 可以接受文件描述符嗎?“JSON 輸入意外結(jié)束”

io.Reader 可以接受文件描述符嗎?“JSON 輸入意外結(jié)束”

Go
狐的傳說 2023-07-10 14:45:27
json.Unmarshal將打開的文件描述符從 os.Create() 傳遞到接受類型 io.Reader 并運(yùn)行 io.Copy(b.Bytes(), reader) 的函數(shù)后,有效 JSON 失敗下面代碼塊中的方法是否Read()正確實(shí)現(xiàn)?io.Reader包裝該Read方法,但會(huì)向其傳遞一個(gè)打開的文件描述符,將文件讀取為字節(jié),從而允許 io.Copy(b.Bytes(), reader) 將數(shù)據(jù)復(fù)制到 var b 中?有沒有更好的方法來做到這一點(diǎn)而不使用ioutil.ReadAll?已驗(yàn)證 JSON 完全有效。使用 jq 和 3 個(gè)在線 JSON 驗(yàn)證器進(jìn)行驗(yàn)證。驗(yàn)證數(shù)據(jù)實(shí)際上已通過另一個(gè)實(shí)現(xiàn) io.Write 的函數(shù)成功寫入文件。已驗(yàn)證ioutil.ReadAll可以將 JSON 讀取為字節(jié),因此我認(rèn)為所使用的方法實(shí)施不正確。** 這不是我的代碼,我正在對(duì)其他人編寫的代碼進(jìn)行故障排除,但其他人無法回答任何問題 **我有一個(gè) json 文件collected_data.json。該文件是使用 os.Create 創(chuàng)建的file, err := os.Create("/var/log/collected_data.json")配置了一個(gè)結(jié)構(gòu),將其設(shè)置file為DataStore:profiler := &collectors.SystemProfiler{  DataStore:         file,  NetworkInterfaces: interfaces,  ApiURL:            *apiURL,  RunOnce:           *runOnce,  SysTag:            *sysTag,}然后我們運(yùn)行一個(gè)Gather()方法。err = profiler.Send(output)if err != nil {  log.Error(err)}該Send()方法實(shí)現(xiàn)了 SystemProfiler 結(jié)構(gòu):func (s *SystemProfiler) Send(profile *SystemProfile) error {...}到此為止,一切工作正常,直到我們嘗試從 讀取和解組數(shù)據(jù)的代碼部分/var/log/collected_data.json。在此Send()方法中,我們嘗試在兩種情況下讀取文件/var/log/collected_data.json。第一,如果文件不為空,我們讀取該文件,并用它做一些事情(此處未顯示)。data, err := store.Read(s.DataStore)if err != nil {  log.Print("I couldn't read the datastore")  return err}第二,如果文件不為空,我們將數(shù)據(jù)寫入文件,然后立即將其讀回并 Unmarshal 以滿足稍后在reflect.DeepEqual數(shù)據(jù)比較和寫入文件的數(shù)據(jù)之間進(jìn)行比較的函數(shù)。在這兩種情況下,該Read()方法都會(huì)返回“Unexpected end of JSON input”,并且文件中包含有效的 JSON /var/log/collected_data.json。用于寫入數(shù)據(jù)的方法工作得很好。{"level":"info","msg":"I couldn't read the datastore","time":"2019-08-02T02:26:42-04:00"}{"level":"error","msg":"unexpected end of JSON input","time":"2019-08-02T02:26:42-04:00"}該Read()方法如下所示:// Read reads JSON data from an io.Readerfunc Read(reader io.Reader) (interface{}, error) {  var data interface{}  var b bytes.Buffer  io.Copy(&b, reader)  err := json.Unmarshal(b.Bytes(), &data)    if err != nil {      return nil, err    }  return data, nil}預(yù)期成績:有效的 JSON 從 io.Reader 類型的 reader 復(fù)制到 bytes.Buffer 類型的 b,成功解組并返回。實(shí)際結(jié)果:{"level":"error","msg":"JSON 輸入意外結(jié)束","time":"2019-08-02T02:26:42-04:00"}
查看完整描述

1 回答

?
暮色呼如

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

問題的答案是肯定的。An*os.File可以用作io.Reader.

問題在于應(yīng)用程序?qū)?shù)據(jù)寫入文件,然后嘗試從文件中讀取相同的數(shù)據(jù),而不查找數(shù)據(jù)寫入的位置。

通過在調(diào)用 store.Write 之后和調(diào)用 store.Read 之前添加以下代碼來解決此問題。

 if _, err := s.DataStore.Seek(io.SeekStart, 0); err != nil {
      return err
 }


查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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