php小編子墨為您介紹Go語(yǔ)言中的模板和多行字符串縮進(jìn)。在Go語(yǔ)言中,模板是一種方便生成文本輸出的工具,它可以將變量插入到指定的模板中,并生成最終的輸出結(jié)果。同時(shí),多行字符串縮進(jìn)是一種使代碼更易讀的技巧,它可以使代碼在多行展示時(shí)保持一致的縮進(jìn)風(fēng)格,提高代碼的可讀性和維護(hù)性。在本文中,我們將詳細(xì)介紹Go語(yǔ)言中模板的使用方法和多行字符串縮進(jìn)的技巧,幫助您更好地應(yīng)用于實(shí)際開(kāi)發(fā)中。
問(wèn)題內(nèi)容
因此,我嘗試使用 text/template 包和模板值(多行字符串)來(lái)生成 yaml 文件。我遇到的問(wèn)題是模板字符串的縮進(jìn)與 tpl 中的模板變量不在同一級(jí)別。
這里的(有點(diǎn)人為的例子):
package main
import (
"os"
"text/template"
)
func main() {
tpl := template.must(template.new("yml").parse(
`routes:
{{ . }}
`))
value := `foo
bar`
tpl.execute(os.stdout, value)
}
登錄后復(fù)制
游樂(lè)場(chǎng):https://goplay.space/#2ek7_elztwa
我想在這里看到的輸出顯然是
routes: foo bar
登錄后復(fù)制
而不是
routes: foo bar
登錄后復(fù)制
是否有一些神奇的前綴可以避免這種情況?
解決方法
我能夠使用以下代碼來(lái)滿足您的要求。我使用了包小枝。它為我們提供了可以輕松實(shí)現(xiàn)您目標(biāo)的功能。代碼如下:
package main
import (
"os"
"text/template"
"github.com/Masterminds/sprig/v3"
)
func main() {
tpl := template.Must(template.New("yml").Funcs(sprig.FuncMap()).Parse(
`routes:
{{ . | indent 2 }}
`))
value := `foo
bar`
tpl.Execute(os.Stdout, value)
}
登錄后復(fù)制
我使用 funcs 方法將函數(shù)傳遞到模板引擎中。這些函數(shù)是從對(duì) sprig.funcmap() 的調(diào)用中返回的。
請(qǐng)注意,您必須在 parse 之前調(diào)用此函數(shù),否則會(huì)出現(xiàn)混亂。
然后,我添加了注釋| indent 2 將行縮進(jìn)兩個(gè)字符。如果運(yùn)行代碼,您將獲得所需的輸出。
可以在此處找到可用功能的完整列表。
如果這解決了您的問(wèn)題,請(qǐng)告訴我,謝謝!






