All Articles

bufio.Scannerで一行づつ読めない

一行こんな感じでコードを書いていたら、長い行の場合途中で途切れてしまった。

func main() {
	sc := bufio.NewScanner(os.Stdin)
	sc.Scan()
	sc.Text()
	sc.Scan()
	sc.Text()
}

予め長い行を読むことがわかっていればイニシャルバッファを長めしてやれば良い。

sc.Buffer([]byte{}, 100000000)

それか、分割を行ではなく単語にしても良い

sc.Split(bufio.ScanWords)

ちなみに、内部ではエラーも吐いている

if err := sc.Err(); err != nil {
	// error handling
}

地味に結構ハマってしまった。。。