首页 > 后端开发 > Golang > Go 模板范围循环变量会在每次迭代时重置吗?

Go 模板范围循环变量会在每次迭代时重置吗?

DDD
发布: 2024-12-21 02:20:10
原创
875 人浏览过

Do Go Template Range Loop Variables Reset on Each Iteration?

Go 模板范围循环中的变量:它们在迭代时重置吗?

在 Go 模板中,范围循环之外声明的变量不会重置在每次迭代中。但是,在循环中为变量分配新值时会出现问题。

考虑以下代码:

{{ $prevDate := "" }}
{{ range $post := .Posts }}
    {{ if ne $prevDate $post.Date }}
        <div>
登录后复制

目的是将 $prevDate 与当前帖子的日期进行比较以确定该帖子是否发生在同一天。但是, $prevDate 似乎在每次循环迭代开始时重置为空字符串。

此行为的原因是变量 $prevDate 在循环内重新声明。这将创建一个仅在当前迭代范围内的新变量。原始 $prevDate 变量在循环外保持不变。

要解决此问题,有两种可能的解决方案:

解决方案 #1:使用注册函数

您可以注册一个自定义函数,该函数获取当前索引并返回上一篇文章的索引日期:

func PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return posts[i-1].Date
}
登录后复制

然后,在您的模板中:

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
    ...
{{end}}
登录后复制

解决方案#2:使用帖子方法

或者,您可以向您的帖子类型添加一个方法:

func (p *Posts) PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return (*p)[i-1].Date
}
登录后复制

在您的模板:

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
    ...
{{end}}
登录后复制

以上是Go 模板范围循环变量会在每次迭代时重置吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板