首页 > 后端开发 > Golang > 正文

如何在 Go 模板中访问外部范围的变量?

Barbara Streisand
发布: 2024-11-09 03:36:02
原创
881 人浏览过

How to Access Variables from Outer Ranges in Go Templates?

错误:在具有嵌套范围的 Go 模板中“无法评估类型 Y 中的字段 X”

错误“无法评估类型 Y 中的字段 X(X 不是 Y 的一部分,但陷入了 {{range}} 循环)”当您尝试访问不属于在 Go 模板中迭代的结构体。当您有嵌套范围并尝试访问在外部范围中定义的变量时,可能会发生这种情况。

例如,请考虑以下示例:

type User struct {
    Username string
    Password []byte
    Email string
}

func main() {
    users := []User{{"user1", []byte("password"), "user1@example.com"}, {"user2", []byte("password"), "user2@example.com"}}
    renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
        "lang":  "en",
        "users": users,
    })
}
登录后复制

在相应的模板文件中,以下代码尝试访问 range 循环内的 lang 变量:

{{ range .users }}
  <form action="/{{ .lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}
登录后复制

但是,由于 lang 不是 User 结构体的字段,因此模板引擎将引发上述错误。要解决此问题,您可以使用 $ 变量来访问当前上下文,其中包含外部范围中定义的所有变量。更新后的模板代码如下所示:

{{ range .users }}
  <form action="/{{ $.lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}
登录后复制

这将正确访问 lang 变量并生成所需的输出。

以上是如何在 Go 模板中访问外部范围的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

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