错误:在具有嵌套范围的 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中文网其他相关文章!