1 回答
TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個贊
由于String是用指針接收器定義的,因此您需要將“可尋址”實(shí)例傳遞mail.Address給模板才能執(zhí)行該方法。
您可以通過傳入一個指向 的指針來完成此操作f。
if?err?:=?tmpl.Execute(&buff,?&f);?err?!=?nil?{?
???panic(err)
}或者您可以通過傳遞指針來做到這一點(diǎn)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 代碼中執(zhí)行此操作的原因是編譯器會為您執(zhí)行此操作。
例如:
fmt.Println(to.String())
變成:
fmt.Println((&to).String())
如果 x(的類型)的方法集包含 m 并且參數(shù)列表可以分配給 m 的參數(shù)列表,則方法調(diào)用 xm() 是有效的。如果 x 是可尋址的并且 &x 的方法集包含 m,則 xm() 是 (&x).m() 的簡寫
- 1 回答
- 0 關(guān)注
- 341 瀏覽
添加回答
舉報(bào)
