3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Golang】改行などをエスケープして表示したい。【代入済み変数の文字列をエスケープ出力】

Last updated at Posted at 2021-08-24

改行やタブ入りの文字列の変数をプリントする際に、展開させずにエスケープしたまま表示させたい。
つまり文字列内のタブ(0x09)は "\t" として表示させたい。

展開させないで出力したい
string("Hello\tworld!") // --> Hello\tworld! として欲しい
string(`Hello
world!`)                // --> Hello\nworld! として欲しい

「"golang" 文字列 改行をエスケープして表示」でググるも、初歩的するぎるため、逆の方法(タブや改行をエスケープして変数にセットし、出力時にパースする方法)や、あっても代入時に `(バッククォート)を使う方法ばかり。すでに代入済みの変数を展開せずにエスケープしたまま出力したいのです。
タイトルからピンポイントの記事がすぐに見つからなかったので、自分のググラビリティとして。

TL; DR (今北産業)

  1. fmt.Printf()%#v フォーマットを使う。
  2. 使用例: fmt.Printf("%#v\n", "my\tsample\ndata")
    - fmt.Printf("%s", "my\tsample\ndata")
    + fmt.Printf("%#v", "my\tsample\ndata")
    
  3. 具体例:
    実際の動くサンプル
    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
    

参考文献

  • Printing | fmt package | Documentation @ pkg.go.dev
3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?