第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go模板無法調(diào)用字段上的方法

Go模板無法調(diào)用字段上的方法

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

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


查看完整回答
反對 回復(fù) 2023-07-31
  • 1 回答
  • 0 關(guān)注
  • 341 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號