关于在Golang中使用模板文字串(变量插值)的方法 #golang

简单来说

我正在公司用Golang编写一个简单的工具来输出Markdown格式的字符串,但是我注意到当我使用字符串文字(`:反引号)作为输出文本的模板时,无法转义反引号。。。

仔细阅读规范后,我认为确实如此。我思考着如何编写才能使源代码更易阅读,并尝试了各种方法。

但是我想要像JS的模板字符串一样轻松地写入!

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

考虑了一下,我想到了四种模式,写下来看看。
1. 使用 fmt.Sprintf
2. 使用 strings.Replace
3. 仅将反引号部分连接为字符串
4. 不使用字符串字面量(使用字符字面量)

示例代码

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

总结

我对这些都觉得不太理想。。。如果要做成一个正式模板的话,我觉得把它放在另一个文件里会更整洁,但是因为我想要做得轻松简洁易读,所以稍微考虑了一下。

bannerAds