登录
首页 >  Golang >  Go问答

Go模板中如何传入“在途中创建”的地图

来源:stackoverflow

时间:2024-02-08 11:48:23 188浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Go模板中如何传入“在途中创建”的地图》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我想在 Go 模板中制作类似 UI 组件 100% 可重用的东西,但我不知道是否可以做到。所以我正在尝试做下一步:

{{define "components/menu-button"}}
{{.content}}
{{end}}

这是我的组件,它需要一个 map 因为属性是小写的。

然后在我的主页中,我有一个小菜单,它在我的导航栏中使用了 components/menu-button 组件的 3 倍:


但我不知道我是否可以以某种方式创建一个 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://go.dev/play/p/Sl1ON-z7Mtn

今天关于《Go模板中如何传入“在途中创建”的地图》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>