亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go模板無法調用字段上的方法

Go模板無法調用字段上的方法

Go
森欄 2023-07-31 15:10:13
net/mail.Address我有一個提供一些編組邏輯的包裝器。我試圖在模板中使用它,但我不斷收到can't evaluate field String in type EmailAddress. 模板文檔說:數據的 niladic 方法的名稱,前面帶有句點,例如  。方法結果是調用以點為接收者的方法 dot.Method() 的值。和方法調用可以鏈接并與任何深度的字段和鍵組合:  .Field1.Key1.Method1.Field2.Key2.Method2因此,考慮到這一點,我寫了這樣的內容:我已經單獨驗證了調用EmailAddress.String是完全合法的,所以我無法弄清楚為什么唯一的輸出是:Error: template: Sample Text:1:13: executing "Sample Text" at <.From.String>: can't evaluate field String in type main.EmailAddress編輯根據評論者的建議,我將調用從.From.String和更改.To.String為.From.Address.String和.To.Address.String,因為“String未定義于EmailAddress,它定義于EmailAddress.Address”但結果是一樣的:Error: template: Sample Text:1:13: executing "Sample Text" at <.From.Address.String>: can't evaluate field String in type mail.Address
查看完整描述

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() 的簡寫


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號