golangで末尾の改行を削除する際はstrings.TrimSpace使う
無駄にハマって時間を費やしたので備忘。
とあるCSVをパースするバッチをgolangで書いていて以下のようなコードを書いていた。
csv := strings.TrimRight(record, "\n") columns := strings.Split(csv, ",")
でも上記のコードだと何故かcolumnsの最後の要素に改行がついてて、あれれ〜?おかしいな〜??ってなってたら、インプットのCSVの改行コードが"\r"
でござった。
じゃあ、改行コードの種類を気にせずどうやってトリムすれば良いかというとstrings.TrimSpaceを使えって話。
csv := strings.TrimSpace(record)
columns := strings.Split(csv, ",")
これなら改行コードの種類に限らず全部消してくれる。空白も消える。ついでに末尾だけでなく先頭もからも消えるけどほとんど場合は問題ない。
最初はTrimSpaceは空白だけ消してくれると思い込んでたんだけど、そんなことはなくUnicodeで空白とみなしている'\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP)
を消すらしい。
GoDocちゃんと見ろという話であった。