Golang でファイルに書き込んだ時の改行コードが CRLF ではなく LF になる件

ファイルに書き込む系の処理の話だが、Python で書いてきたコードたちは CRLF になってくれていた。しかし Golang だと LF になる模様。CRLF にする方法はないものかと調べた。

結論

Golang 的には LF のみ

GitHub で議論されてる。

Issue での提案は「Windows なら \n は CRLF にしろや」だけど、最終的な結論は We aren't going to do this, so closing. で「この件はやらないっす。ばいばい」

どうしても CRLF で出したいなら?

自力で \r\n を Write するしかなさそう。

あるいは mattn さんの mattn/go-textwriter を使うとか。

余談

なぜ LF であるべき?

同じく mattn さんのコメント が勉強になる。

  • Golang はクロスプラットフォームに強い
  • 改行コードも LF に揃えた方が楽
  • Win10 のメモ帳も LF に対応したし、もう LF の流れでしょ

という感じだろうか。本当に仰るとおりです。

そもそもなぜ私は CRLF を使っている?

以下の事情による。

  • 昔からずっと使い続けてきた名残(かれこれ10年以上は Windows でテキスト書いてる)
  • 基本的に Windows しか使ってない
  • Gitconfig の autocrlf は true がデフォで運用している
  • バッチファイルや秀丸エディタマクロなど、CRLF じゃないと動かないものに依存している(たぶん他にもある)