11
6

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 5 years have passed since last update.

Golang でテンプレートリテラルの利用(文字列中の変数展開)について #golang

Last updated at Posted at 2018-08-02

概要

会社でマークダウン形式の文字列を出力する簡単なツールを Golang を使って書いてたんですが、
出力する文字のテンプレートを文字列リテラル(`:バッククォート)を利用していたところバッククォートのエスケープができないことに気づきました。。。

よくよく仕様を読んでみるとそれはそーかって思うんですが、どうやって書くとソースコード的に見やすくなるかなって思って色々試してみました。

でも JS とかのテンプレートリテラルみたいに気軽に書きたい!!!

var a = "hoge";
console.log(`${a} fuga`);

ざっと考え付く限り4パターン浮かんだので、書いて見ました。

  1. fmt.Sprintf の利用
  2. strings.Replace の利用
  3. バッククォート部分のみ文字列として結合
  4. 文字列リテラルを利用しない(文字リテラルを利用)

サンプルコード

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

まとめ

なんかどれもイマイチな気がしました。。。
ちゃんとテンプレートにするなら別ファイルとかにした方が綺麗な気がしますが、気軽に見やすく作りたかったのでちょっと考えて見ました。

11
6
0

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
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?