Posted at

text/templateを用いた際の文字列の色付け

https://github.com/x-color/tdl を作成時にtext/templateを用いてターミナル上に出力する際に、色付けしようとして詰まったので、その解決策のメモを残す。


何がしたかったのか

text/templateを用いた際に、文字列に色を付けてターミナル上に出力したい。

colored text image


改善前

色付けするカラーコードを追加し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)
}


このコードは実行すると

non colored text image

のようになり色付けされない。


改善後

変更点は、色付けしたい文字列とカラーコードをまとめて{{""}}で囲って出力した点。


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)
}


このコードは実行すると

colored text image

のようになりしっかりと色付けされる。


おまけ

text/templateを用いて{{, }}を出力したい場合も{{""}}で囲うことで出力することができる。

参考 https://stackoverflow.com/questions/17641887/how-do-i-escape-and-delimiters-in-go-templates