所以我有以下測(cè)試 Go 代碼,該代碼旨在通過 stdin 從二進(jìn)制文件中讀取,并將讀取的數(shù)據(jù)發(fā)送到通道(然后在通道中進(jìn)行進(jìn)一步處理)。在我在這里給出的版本中,它只從 stdin 讀取前兩個(gè)值,盡管就顯示問題而言這很好。package mainimport ( "fmt" "io" "os")func input(dc chan []byte) { data := make([]byte, 2) var err error var n int for err != io.EOF { n, err = os.Stdin.Read(data) if n > 0 { dc <- data[0:n] } }}func main() { dc := make(chan []byte, 1) go input(dc) fmt.Println(<-dc)}為了測(cè)試它,我首先使用 go build 構(gòu)建它,然后使用命令向它發(fā)送數(shù)據(jù) -./inputtest < data.bin我目前用來測(cè)試的數(shù)據(jù)只是使用 openssl 命令創(chuàng)建的隨機(jī)二進(jìn)制數(shù)據(jù)。我遇到的問題是它錯(cuò)過了 Stdin 的第一個(gè)值,只給出了第二個(gè)和更大的值。我認(rèn)為這與頻道有關(guān),因?yàn)閯h除頻道的相同腳本會(huì)產(chǎn)生正確的數(shù)據(jù)。有沒有人遇到過這個(gè)?例如,我在運(yùn)行此命令時(shí)得到以下輸出 -./inputtest < data.bin[36 181]而我應(yīng)該得到-./inputtest < data.bin[72 218](兩種情況下的二進(jìn)制數(shù)據(jù)相同。)
- 1 回答
- 0 關(guān)注
- 270 瀏覽
添加回答
舉報(bào)
0/150
提交
取消