2 回答

TA貢獻1795條經(jīng)驗 獲得超7個贊
管道緩沖區(qū)的限制因系統(tǒng)而異。例如,Mac OS X 默認使用 16384 字節(jié)的容量。
您可以使用此 bash 腳本來檢查您的緩沖區(qū)容量:
M=0; while printf A; do >&2 printf "\r$((++M)) B"; done | sleep 999
所以它與 go 無關(guān),因為我試圖將您的代碼更改為從文件和 Unmarshal 中讀取并且它有效:
func main() {
reader, err := os.Open("test-not-working.json")
if err != nil {
panic(err)
}
var res response
decoder := json.NewDecoder(reader)
err = decoder.Decode(&res)
if err != nil {
panic(err)
}
fmt.Println(res.Content)
}

TA貢獻1818條經(jīng)驗 獲得超8個贊
這是因為您的操作系統(tǒng)的管道緩沖區(qū)限制為 65536 字節(jié)。因此,該os.Stdin.Read(...)函數(shù)一次可以讀取 65536 個字節(jié)。
您可以使用這個簡單的替換來修復(fù)您的代碼:
n, err := io.ReadFull(reader, received)
還有你的錯誤:
msg, err := Receive(os.Stdin)
if err != nil {
panic(err)
}
你比較過err,nil但你沒有比較msg過nil。但是由于您已經(jīng)讀取了 65532 ( 65536 - 4) 個字節(jié),因此func Receive(...)返回的nil, nil.
要解決此問題,您的函數(shù)Receive(...)不應(yīng)返回nil, nil。
- 2 回答
- 0 關(guān)注
- 281 瀏覽
添加回答
舉報