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