キーボードから入力を読み取ったり、パイプで挿入されたファイルから一度に 1 行ずつ読み取ったりできる関数を作成しようとしています。prompt()
このテスト コードのようなキーボード入力を受け取る関数が既にあります。
package main
import (
"fmt"
"bufio"
"os"
)
func print(format string, a ...interface{}) {
fmt.Printf(format+"\n", a...)
}
func prompt(format string) string {
fmt.Print(format)
in := bufio.NewScanner(os.Stdin)
in.Scan()
return in.Text()
}
func greet() {
name := prompt("enter name: ")
print(`Hello %s!`, name)
}
func humor() {
color := prompt("enter favorite color: ")
print(`I like %s too!`, color)
}
func main() {
greet()
humor()
}
ここではgreet()
、humor()
両方を使用prompt()
して入力を取得します。プログラムを実行して応答を入力すると、期待どおりに動作します。ただし、ファイルがある場合a.txt
:
bobby bill
soft, blue-ish turquoise
そして run: .\test< a.txt
、プログラムは次を出力します:
enter name: Hello bobby bill!
enter favorite color: I like too!
それ以外の:
enter name: Hello bobby bill!
enter favorite color: I like soft, blue-ish turquoise too!
私が理解しているように、これは がread all でbufio.Scanner
作成されたためです。グローバル変数を作成することでこの問題を簡単に解決でき、毎回新しい変数を作成する代わりにそれを使用できますが、グローバル変数に頼らずにこれを行うより良い方法があるかどうか疑問に思っています。greet()
a.txt
bufio.Scanner
prompt()
bufio.Scanner