首頁  >  文章  >  後端開發  >  Go 範本和多行字串縮排

Go 範本和多行字串縮排

WBOY
WBOY轉載
2024-02-09 22:09:14585瀏覽

Go 模板和多行字符串缩进

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 將行縮排兩個字元。如果運行程式碼,您將獲得所需的輸出。

可以在此處找到可用功能的完整清單。
如果這解決了您的問題,請告訴我,謝謝!

以上是Go 範本和多行字串縮排的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除