当前位置: 首页 > 面试题库 >

Go模板:无法评估类型Y的字段X(X不是Y的一部分,但停留在{{range}}循环中)

王高邈
2023-03-14
问题内容

这里回答了类似的问题,但我认为它不能解决我的问题。

假设您具有以下结构:

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

而且,URL具有如下结构:example.com/en/users,其中"en"URL参数将传递给模板,如下所示:

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

在HTML模板中,我有以下内容:

{{ 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结构的一部分,所以我得到了错误..那么如何{{ .lang }}在内部访问{{range .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 }}

该行为记录在这里:

执行开始时,$将设置为传递给的数据参数Execute,即dot的起始值。

如果使用的是嵌套范围,则始终可以使用with语句或变量赋值语句回退以将点分配给其他对象。



 类似资料:
  • 问题内容: 几年前我有这个面试问题,但是我还没有找到答案。 做无限循环的x和y应该是什么? 我们试着用,, VS 。 问题答案: 您需要两个可比较,具有相同值但代表不同实例的变量,例如: 和都为true,因为取消了装箱,但是实例相等性为false。 请注意,它也可以与一起使用,并且任何值(不仅是0)都可以使用。 您还可以使用JVM的复杂性-它们通常仅缓存最多127个整数,因此也可以使用: (但是1

  • 这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。

  • 问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,

  • X|Y

    描述 (Description) 逻辑运算符[X|Y]匹配X或Y. 例子 (Example) 以下示例显示了逻辑运算符的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LogicalOperatorDemo { private sta

  • 问题内容: 使用math.pow或**运算符哪个更有效?我什么时候应该使用另一个? 到目前为止,我知道可以返回一个或一个,如果您使用小数,该函数将返回一个浮点数 问题答案: 使用Power运算符将更快,因为它不会产生函数调用的开销。如果您反汇编Python代码,则可以看到以下内容: 请注意,我在这里使用变量作为指数,因为类似常数的表达式实际上是在编译时求值的。 现在,实际上,这种差异并不重要,正如

  • 将返回来自x(包括)和y(不包括)的流。将返回来自x(含)和y(含)的流。 我期望调用或调用。但是当查看的源代码时,它是这样的: 也有一个非常相似的实现,而不是。唯一的区别是的第三个参数是而不是表示范围已关闭。 然后使用此布尔值初始化类中的字段,并针对它提到以下注释: 如果该范围已关闭且最后一个元素未被遍历,则为1,如果该范围已打开,或该范围已关闭且所有元素都已被遍历,则为0 为什么需要这样的实现