2016-03-04 67 views
2

由于某种原因,我的模板不工作,我不知道为什么。的价值 。是一个映射[字符串] UpFile其中UpFile是一个结构与Path()方法没有参数。这里是模板的相关部分:

{{ range $key, $value := . }} 
<a href="{{ $value.Path }}">{{ $key }}</a> 
{{ end }} 

该模板在变量$ value没有调用Path()的情况下工作。我还测试了对Path的调用时的值。是UpFile,它的工作。 go doc在模板上表示调用变量上的方法很好。模板编译并服务,但是范围内没有任何内容被输出。当我省略对Path()的调用时,我得到一串字符。谢谢参观。

编辑:使用UpFile中的字段而不是Path方法提供预期的输出。仍然不明白为什么呼叫路径不起作用。

回答

2

如果Path方法是上的指针接收器

func (f *UpFile) Path() string { return f.path } 

然后改变地图的值的指针

var m map[string]*UpFile 

由于地图值不寻址的,这是不可能请在UpFile地图值上调用*UpFile方法。

另一种选择是将Path方法更改为使用非指针接收器类型UpFile

+0

谢谢,我最终将方法改为 func(f UpFile)Path()string {return f.path} 而不是更改地图。 –

-2

只是省略了括号,它应该没问题。例如:

{{ range $key, $value := . }} 
    <a href="{{ .Path }}">{{ $key }}</a> 
{{ end }}