https://github.com/x-color/tdl を作成時にtext/template
を用いてターミナル上に出力する際に、色付けしようとして詰まったので、その解決策のメモを残す。
何がしたかったのか
text/template
を用いた際に、文字列に色を付けてターミナル上に出力したい。
改善前
色付けするカラーコードを追加しtext/template
を用いてターミナル上に出力するコード。
template.go
package main
import (
"os"
"text/template"
)
func main() {
temp := `\x1b[1m\x1b[32mColored\x1b[0m`
t := template.Must(template.New("colored text").Parse(temp))
t.Execute(os.Stdout, nil)
}
このコードは実行すると
のようになり色付けされない。
改善後
変更点は、色付けしたい文字列とカラーコードをまとめて{{""}}
で囲って出力した点。
template.go
package main
import (
"os"
"text/template"
)
func main() {
temp := `{{"\x1b[1m\x1b[32mColored\x1b[0m"}}` // ここを修正した
t := template.Must(template.New("colored text").Parse(temp))
t.Execute(os.Stdout, nil)
}
このコードは実行すると
のようになりしっかりと色付けされる。
おまけ
text/template
を用いて{{
, }}
を出力したい場合も{{""}}
で囲うことで出力することができる。
参考 https://stackoverflow.com/questions/17641887/how-do-i-escape-and-delimiters-in-go-templates