はじめに
Goを勉強しようと思い、せっかくなので競技プログラミング系の問題を解きながら基本文法の整理をしようとしていました。
そうなると、標準入力が発生するので、以下の投稿を参考にして実装
Go 言語で標準入力から読み込む競技プログラミングのアレ --- 改訂第二版
なるべく短くしたいので、fmt.Scan
を使って
package main
import (
"fmt"
)
func main() {
var a string
fmt.Scan(&a)
fmt.Println(a)
}
を使うことに。
問題
よっしゃこれでいいでしょ!と思い、hello world
を入力してそのまま帰ってくるか検証してみることに
$ go run practice.go
hello world
hello
あれ・・・?なぜかhelloだけ。
色々試行錯誤した結果ドキュメントを読むとこんな風に書いてました。
##Scan関数
func Scan(a ...interface{}) (n int, err os.Error)
Scanは、標準入力から読み込んだテキストをスキャンし、スペースで区切られた値として、順に引数に格納します。改行文字はスペースとしてカウントされます。この関数はスキャンに成功した項目数を返します。この数が、引数の数より少ないときは、errにその理由を返します。
つまり、自動で空白区切りで返してくれるんですね!
というわけで以下のように書いたら解決
package main
import (
"fmt"
)
func main() {
var a, b string
fmt.Scan(&a, &b)
fmt.Println(a, b)
}
結論
ちゃんとドキュメント読みましょう!笑