生涯未熟

生涯未熟

プログラミングをちょこちょこと。

golangでScanが上手く動かなかったので原因調べてみた

どうも、今日も元気にGolang生活しております。

今回はbufioパッケージにあるScanの話をば。

問題の発生

とあるライブラリを使ってコードを書いていた時に、Scanを実行しても動かないという現象に遭遇しました。

コードは以下のような感じ

で、 hoge.txt の中身が出力されるのが予想される挙動だったんですが、出力されず・・・

どうしてだろうと、libraryFuncの中を読んでいくとこちらでもfを受け取ってScanを走らせていたことが分かり、「もしやScanって2回動かすとダメなのか?」と以下のようなコードを書いて調査してみました。

一旦、Scanを2回実行してみる形でコードを組んでみました。

で、これを実行してみてもやはり動かない。

原因は?

色々と調べてみてもあんまり理解を得なくて、結局Twitterで凄いエンジニアの方たちに調べてもらった結果、「ファイルのオフセットが回りきってる」という結論に。

というわけで、これまたコード書いて調べてみました。

実行してみると、「0 10」という結果が。

10行のファイルだったので、2回目実行前には既にファイルオフセットが最大の10になっていることが分かりますね。

対処法

対処としては、再度Scanを実行する前にファイルをオープンし直せば大丈夫でしょう。(何か他に良い方法を知っている方がおられましたらご教示下さい・・・)

[追記] もしくは2回目のScan実行前に f.Seek(0, 0) でファイルオフセットを0に戻してもいいかもしれません。

コードとしてはこんな感じ。

これで想定した挙動になりました!

思わぬところでハマりましたが、原因調べてハラオチできたので満足です。

教えてくださった方ありがとうございました!