为了账号安全,请及时绑定邮箱和手机立即绑定

Go 模板:在模板中调用 $variable 的方法

Go 模板:在模板中调用 $variable 的方法

Go
POPMUISE 2021-12-20 14:38:48
由于某种原因,我的模板不起作用,我不知道为什么。的价值 。是一个 map[string]UpFile,其中 UpFile 是一个结构体,方法 Path() 不带参数。这是模板的相关部分:{{ range $key, $value := . }}<a href="{{ $value.Path }}">{{ $key }}</a>{{ end }}该模板无需在变量 $value 上调用 Path() 即可工作。我还测试了当 . 是 UpFile 并且它起作用了。模板上的 go doc 说对变量的方法调用很好。模板会编译并提供服务,但不会输出范围内的任何内容。当我省略对 Path() 的调用时,我得到一串字符。谢谢参观。编辑:使用 UpFile 中的字段而不是 Path 方法提供预期的输出。仍然不明白为什么调用 Path 不起作用。
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

Path方法在指针接收器上:

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

中的值为$pathPathPath()无法在 a 上调用该方法,Path因为指针接收器方法不在值类型的方法集中

有两种方法可以解决问题。第一种是使用值接收器声明方法:

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

解决问题的第二种方法是使用*Path值而不是Path值。将地图更改为:

var m map[string]*UpFile


查看完整回答
反对 回复 2021-12-20
?
jeck猫

TA贡献1909条经验 获得超7个赞

只要省略括号就可以了。例子:


{{ range $key, $value := . }}

  <a href="{{ .Path }}">{{ $key }}</a>

{{ end }}


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号