0
所以我有以下測試去代碼,它被設計爲通過stdin從二進制文件讀取,並將讀取的數據發送到一個通道(在那裏它將被處理進一步)。在我在這裏給出的版本中,它只能讀取標準輸入的前兩個值,儘管就顯示問題而言這沒什麼問題。從標準輸入接收二進制數據,發送到去通道
package main
import (
"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)
}
爲了測試它,我第一次建立它使用去構建,然後用我使用目前測試的命令 -
./inputtest < data.bin
數據發送數據給它創建只是隨機二進制數據使用openssl命令。
我遇到的問題是它錯過了Stdin的第一個值,只給出了第二個和更大的值。我認爲這是關於頻道的,因爲刪除頻道的同一個腳本會生成正確的數據。有沒有人遇到過這個?例如,我在運行此命令 -
./inputtest < data.bin
[36 181]
的時候而我應該是getting-
./inputtest < data.bin
[72 218]
得到下面的輸出(二進制數據是在這兩種情況下是相同的。)
這一工程!謝謝! – user3027597