私はGoを初めて使用し(昨日のように)、標準入力からのデータを処理する単純なプログラムをいじっています。私がやりたかったことは、標準入力にデータが提供されない場合、プログラムがヘルプ画面を出力して終了するようにすることでした。私が遭遇した問題は、stdin を介してデータが提供されない場合、プログラムが無期限にハングするように見えることです。プログラムと私の使用目的の短い例を次に示します。
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
str := scanner.Text()
fmt.Println(str)
}
}
Running with input:
go run test.go < lines.txt
line1
line2
line3
Running with no input:
go run test.go
入力を提供しない 2 番目のケースは、プログラムがハングする原因です。ドキュメントを読んでも、入力を無期限に待機せず、標準入力に何も存在しない場合にプログラムを中断するようにプログラムをコーディングする方法が明確ではありません。