首頁 > 後端開發 > Golang > 主體

如何在Go模板中傳入「途中建立」的地圖

WBOY
發布: 2024-02-05 23:39:03
轉載
614 人瀏覽過

如何在Go模板中傳入「途中建立」的地圖

問題內容

我想在 Go 範本中製作類似 UI 元件 100% 可重用的東西,但我不知道是否可以做到。所以我正在嘗試做下一步:

<code>{{define "components/menu-button"}}
<a href="{{.link}}" class="text-white">{{.content}}</a>
{{end}}
</code>
登入後複製

這是我的元件,它需要一個 map 因為屬性是小寫的。

然後在我的主頁中,我有一個小選單,它在我的導覽列中使用了 components/menu-button 元件的 3 倍:

<code><div class="hidden gap-4 sm:flex">
    {{template "components/menu-button" {"link": "/contact", "content": "Contact"}}}
    {{template "components/menu-button" {"link": "/docs", "content": "Docs"}}}
    {{template "components/menu-button" {"link": "/download", "content": "Download"}}}
</div>
</code>
登入後複製

但我不知道我是否可以以某種方式創建一個 map 就像我在範例中所做的那樣,它就像 JSON 一樣,但我嘗試過。

順便說一句,它給了我下一個錯誤:

unexpected "{" in template clause
登入後複製


正確答案


Go 的範本不支援這種語法。

你可以做的是宣告一個自訂函數,例如

func MakeMap(kvs ...any) map[any]any {
    m := make(map[any]any)
    for i := 0; i < len(kvs)-1; i+=2 {
        m[kvs[i]] = kvs[i+1]
    }
    return m
}
登入後複製

然後您可以使用 使函數可用於模板(*模板).Funcs,例如

t.Funcs(template.FuncMap{"M":MakeMap})
登入後複製

然後,在範本內,您可以使用金鑰 M 呼叫函數。

{{template "components/menu-button" (M "link" "/contact" "content" "Contact")}}
登入後複製

https://www.php.cn/link/0740bb92e583cd2b88ec7c59f985cb41

以上是如何在Go模板中傳入「途中建立」的地圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板