#4 Goで学ぶ標準入力の基本
Goにおける標準入力の扱いは、シンプルさを重視するGoらしく、比較的わかりやすい書き方が用意されています。この記事では、Goで利用者からの入力を受け取る基本的な方法を解説します。
fmt.Scanを使う
Goで標準入力を扱うもっとも手軽な方法は、fmtパッケージにあるScanという機能を使うことです。
var name string
fmt.Print("名前を入力してください: ")
fmt.Scan(&name)
読み込んだ内容を入れたい変数の前に&という記号を付けるのが特徴です。これは、値そのものではなく「変数の場所」を教えるための書き方です。
bufioを使ったもう1つの方法
fmt.Scanは単語の区切り(スペース)までしか読み取れないため、スペースを含む文章をまるごと受け取りたい場合は、bufioという別のパッケージを使う方法が一般的です。
reader := bufio.NewReader(os.Stdin)
line, _ := reader.ReadString('\n')
line = strings.TrimSpace(line)
ReadString('\n')は改行文字が来るまで読み込むため、まるごと1行を受け取れます。読み込んだ結果には改行が含まれるので、strings.TrimSpaceで取り除くのが定番です。
数値として受け取る
fmt.Scanは、変数の型に合わせて自動的に変換を試みてくれます。
var age int
fmt.Scan(&age)
ただし、数字ではない文字が入力された場合はエラーになるため、実際のプログラムではエラーの確認も合わせて行います。
var age int
_, err := fmt.Scan(&age)
if err != nil {
fmt.Println("数値を入力してください")
}
Goならではの注意点
変数の前に付ける&という記号は、Goを学び始めたばかりの人にとって最初は意味がわかりにくいポイントです。これは「この変数の場所に、読み込んだ値を書き込んでください」とGoに伝えるための書き方だと理解しておくと納得しやすくなります。
複数の値をまとめて受け取る
fmt.Scanには複数のポインタを渡すこともでき、スペース区切りの複数の値を一度に受け取れます。
var a, b int
fmt.Scan(&a, &b) // "3 5" のような入力に対応
まとめ
Goの標準入力はfmt.Scanで手軽に扱えますが、スペースを含む入力にはbufioを使う必要があります。&の意味やエラーの確認方法を理解しておくと、落ち着いて対応できます。
本ページはプロモーションを含みます。
参考書籍(PR)
Goをもっと学びたい方には「Go言語入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿