概要
会社でマークダウン形式の文字列を出力する簡単なツールを Golang を使って書いてたんですが、
出力する文字のテンプレートを文字列リテラル(`:バッククォート)を利用していたところバッククォートのエスケープができないことに気づきました。。。
よくよく仕様を読んでみるとそれはそーかって思うんですが、どうやって書くとソースコード的に見やすくなるかなって思って色々試してみました。
でも JS とかのテンプレートリテラルみたいに気軽に書きたい!!!
var a = "hoge";
console.log(`${a} fuga`);
ざっと考え付く限り4パターン浮かんだので、書いて見ました。
- fmt.Sprintf の利用
- strings.Replace の利用
- バッククォート部分のみ文字列として結合
- 文字列リテラルを利用しない(文字リテラルを利用)
サンプルコード
main.go
package main
import (
"fmt"
"strings"
)
func main() {
p1 := `■ fmt.Sprintf を利用
%s:nonum
a. ああああああ
b. いいいいいい
c. うううううう
%s
`
p1 = fmt.Sprintf(p1, "```", "```")
println(p1)
p2 := `■ strings.Replace を利用
#code_block#:nonum
a. ああああああ
b. いいいいいい
c. うううううう
#code_block#
`
p2 = strings.Replace(p2, "#code_block#", "```", 2)
println(p2)
p3 := `■ バッククォート部分のみ文字列として結合
` + "```" + `:nonum
a. ああああああ
b. いいいいいい
c. うううううう
` + "```"
println(p3)
p4 := "■ 文字列リテラルを利用しない(文字リテラルを利用)\n"
p4 += "```:nonum\n"
p4 += "a. ああああああ\n"
p4 += "b. いいいいいい\n"
p4 += "c. うううううう\n"
p4 += "```\n"
println(p4)
}
まとめ
なんかどれもイマイチな気がしました。。。
ちゃんとテンプレートにするなら別ファイルとかにした方が綺麗な気がしますが、気軽に見やすく作りたかったのでちょっと考えて見ました。