Golang Go语言中模板是否可以通过动态的key取map中的值

Golang Go语言中模板是否可以通过动态的key取map中的值

我有一个 slice

keyList:=[ "2021-02", "2020-08", "2020-07", "2020-05", "2020-02", "2020-01", ]

还有一个 map

dataMap := map[string]int{
"2021-02":123,
"2020-08":234,
"2020-07":234234,
"2020-05":23423,
"2020-02":345345345,
"2020-01":456456,
}

想在模板中通过循环 slice 得到 map 中的值 比如

{{range $index, $date := .keyList}}
    {{if .dataMap.$date}} # 这里貌似不对呀,不知道应该怎么取
        {{range $key,$item := .dataList.$date}}
        <p>{{$date}}:{{$item}}</p>
        {{end}}
    {{end}}
{{end}}

更多关于Golang Go语言中模板是否可以通过动态的key取map中的值的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

好像遇到过 模板中先声明赋值一下 datamap

更多关于Golang Go语言中模板是否可以通过动态的key取map中的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


<br> for _, key := range keyList {<br> fmt.Println(dataMap[key])<br> }<br>
不知道为什么 贴完整代码提示要验证手机,那就贴关键部分吧

不好意思看错了,说的是模板

谢谢大家,我找到方法了
<br>{{range $item := index $.dataList $date}}<br>&lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;span&gt;{{$item.created_at | date "m-d"}}:&lt;a href="{{$item.url}}"&gt;{{$item.title}}&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;<br>{{end}}<br>

在Golang(Go语言)中,模板(template)系统确实支持从map中取值,但是直接通过动态key来访问map的值在标准库的text/templatehtml/template中并不直接支持。这是因为模板设计之初就强调简单性和安全性,避免执行过于复杂的逻辑。

不过,你可以通过一些变通的方法来实现这一需求。一种常见的方法是,在将数据传递给模板之前,先对数据进行预处理,将需要动态访问的map值提取出来,作为独立的变量传递给模板。

例如,如果你的map是data := map[string]interface{}{"key1": "value1", "key2": "value2"},并且你想根据一个动态key(比如keyVar := "key1")来获取对应的值,你可以在将数据传递给模板之前,创建一个新的变量value := data[keyVar],然后将value传递给模板。

另一种方法是自定义模板函数(template function),但这通常涉及到更多的设置和复杂性,包括注册自定义函数到模板中。这种方法虽然功能强大,但也可能引入安全风险,因为它允许模板执行更复杂的逻辑。

总之,虽然Go语言的模板系统不直接支持通过动态key访问map的值,但通过预处理数据或自定义模板函数等方法,你可以实现类似的功能。在实际开发中,选择哪种方法取决于你的具体需求和项目的复杂度。

回到顶部