改行やタブ入りの文字列の変数をプリントする際に、展開させずにエスケープしたまま表示させたい。
つまり文字列内のタブ(0x09
)は "\t
" として表示させたい。展開させないで出力したいstring("Hello\tworld!") // --> Hello\tworld! として欲しい string(`Hello world!`) // --> Hello\nworld! として欲しい
「"golang" 文字列 改行をエスケープして表示」でググるも、初歩的するぎるため、逆の方法(タブや改行をエスケープして変数にセットし、出力時にパースする方法)や、あっても代入時に `
(バッククォート)を使う方法ばかり。すでに代入済みの変数を展開せずにエスケープしたまま出力したいのです。
タイトルからピンポイントの記事がすぐに見つからなかったので、自分のググラビリティとして。
TL; DR (今北産業)
-
fmt.Printf()
で%#v
フォーマットを使う。 - 使用例:
fmt.Printf("%#v\n", "my\tsample\ndata")
- fmt.Printf("%s", "my\tsample\ndata") + fmt.Printf("%#v", "my\tsample\ndata")
- 具体例:
実際の動くサンプル
package main import ( "fmt" ) func main() { mySampleVar := "my\tsample\ndata" fmt.Println("1)", mySampleVar) fmt.Printf("2) %v\n", mySampleVar) fmt.Printf("3) %#v\n", mySampleVar) fmt.Println("4)", strings.Trim(fmt.Sprintf("%#v", mySampleVar), `"`)) } // Output: // 1) my sample // data // 2) my sample // data // 3) "my\tsample\ndata" // 4) my\tsample\ndata
- オンラインで動作をみる @ GoPlayground
参考文献
- Printing | fmt package | Documentation @ pkg.go.dev