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: "[email protected]",
? ? ? ? Name: "",
? ? },
}
from := EmailAddress{
? ? &mail.Address{
? ? ? ? Address: "[email protected]",
? ? ? ? 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 關注
- 265 瀏覽
添加回答
舉報