首页  >  文章  >  后端开发  >  如何在范围循环内访问 Go 模板中的非结构体字段?

如何在范围循环内访问 Go 模板中的非结构体字段?

DDD
DDD原创
2024-11-09 01:00:02798浏览

How to Access Non-Struct Fields in Go Templates Within Range Loops?

在范围循环内访问 Go 模板中的非结构体字段

当使用 {{ range}} 循环中,如果您尝试访问不直接属于结构的字段,则可能会遇到错误。例如,考虑以下示例:

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

renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
  "lang":  chi.URLParam(r, "lang"),
  "users": users})

在 HTML 模板中,尝试访问 {{ .lang }} 字段时可能会遇到以下错误:

`got template: can't evaluate field X in type Y (X not part of Y but stuck in a {{range}} loop)`

发生此错误的原因是 {{ .lang }} 字段不是 User 结构的一部分。要解决此问题,您可以使用 $ 变量,该变量引用分配给 {{ 的数据。 }} 在调用 {{range}} 循环之后。

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

根据 Go 模板文档,当 {{range}} 循环开始执行时,$ 变量会自动设置为数据参数传递给模板。在本例中,数据参数是包含 lang 键的映射。因此,您可以在循环中使用 $ 来访问 lang 值。

如果您需要在嵌套循环中访问多个非结构体字段,您还可以使用 with 语句或变量赋值语句来赋值 {{ 。 }} 到不同的变量。

以上是如何在范围循环内访问 Go 模板中的非结构体字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

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