1 回答
TA贡献1809条经验 获得超8个赞
由于String
是用指针接收器定义的,因此您需要将“可寻址”实例传递mail.Address
给模板才能执行该方法。
您可以通过传入一个指向 的指针来完成此操作f
。
if err := tmpl.Execute(&buff, &f); err != nil { panic(err) }
或者您可以通过传递指针来做到这一点EmailAddress
。
type emailFormatter struct {
From *EmailAddress
To *EmailAddress
}
// ...
f := emailFormatter{
To: &to,
From: &from,
}
// ...
if err := tmpl.Execute(&buff, f); err != nil {
panic(err)
}
或者通过传入一个指向 的指针mail.Address。
type EmailAddress struct{ *mail.Address }
// ...
to := EmailAddress{
&mail.Address{
Address: "em@i.l",
Name: "",
},
}
from := EmailAddress{
&mail.Address{
Address: "no-reply@test.quest",
Name: "",
},
}
f := emailFormatter{
To: to,
From: from,
}
// ...
if err := tmpl.Execute(&buff, f); err != nil {
panic(err)
}
请注意,您不需要在 Go 代码中执行此操作的原因是编译器会为您执行此操作。
例如:
fmt.Println(to.String())
变成:
fmt.Println((&to).String())
如果 x(的类型)的方法集包含 m 并且参数列表可以分配给 m 的参数列表,则方法调用 xm() 是有效的。如果 x 是可寻址的并且 &x 的方法集包含 m,则 xm() 是 (&x).m() 的简写
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报