首页  >  文章  >  后端开发  >  如何在 Go 模板中访问外部范围的变量?

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

Barbara Streisand
Barbara Streisand原创
2024-11-09 03:36:02844浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn