Interface 界面中是否存在不相关的方法破坏文本/模板?

Interface 界面中是否存在不相关的方法破坏文本/模板?,interface,go,go-templates,Interface,Go,Go Templates,游乐场连接: 当我呈现一个包含{.Something.Name}的模板时(通过text/template包),我可以通过接口Foo,它不包含任何方法,并且工作正常。但如果我通过界面栏,我会得到: executing "test" at <.Something.Name>: can't evaluate field Name in type main.Bar 在以下位置执行“测试”:无法计算main.Bar类型中的字段名 为什么接口上存在一个甚至没有使用的无关方法会影响模板的呈现?

游乐场连接:

当我呈现一个包含
{.Something.Name}
的模板时(通过
text/template
包),我可以通过接口
Foo
,它不包含任何方法,并且工作正常。但如果我通过界面
,我会得到:

executing "test" at <.Something.Name>: can't evaluate field Name in type main.Bar
在以下位置执行“测试”:无法计算main.Bar类型中的字段名

为什么接口上存在一个甚至没有使用的无关方法会影响模板的呈现?

文本/模板是特殊的大小写接口{},所谓的函数可以有返回类型接口{},等等。向接口添加方法意味着检测不再触发


东西是一个条(一个接口)。栏没有字段名。如果您想在那里使用接口,则需要通过作为接口一部分的方法提供数据。

可能的重复项您是否验证此代码对该行为负责?我认为这是相当于执行。但也许我错过了什么。哇,真是出乎意料。我不知何故没有找到,但最终得到了相同的解决方案:在将内容传递到模板时,只需使用
interface{}
executing "test" at <.Something.Name>: can't evaluate field Name in type main.Bar
323     for _, cmd := range pipe.Cmds {
324         value = s.evalCommand(dot, cmd, value) // previous value is this one's final arg.
325         // If the object has type interface{}, dig down one level to the thing inside.
326         if value.Kind() == reflect.Interface && value.Type().NumMethod() == 0 {
327             value = reflect.ValueOf(value.Interface()) // lovely!
328         }
329     }