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

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

Go 模板中的結構變量名稱

Go 模板中的結構變量名稱

Go
Cats萌萌 2021-06-29 10:23:30
我正在嘗試使用內置的 http/template 庫將結構傳遞到 Go 模板中。但是,我發現如果我用第一個字母小寫命名結構的變量,它們不會在模板中呈現,但如果我用第一個字母大寫命名它們,它們是。我在這里看到結構可以有大寫和小寫的首字母。那么,為什么 Go 模板引擎不同時渲染兩者呢?
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超3個贊

簡而言之,模板引擎在成員以小寫形式編寫時無法看到成員,因為模板引擎位于與您的結構不同的另一個包中。

你可能已經注意到 Go 沒有使用privateorpublic關鍵字來提高可見性。相反,當標識符的第一個字母為大寫時,所有函數、成員、變量等都是公共的。如果標識符未導出,則它們只能在同一個包中使用。

導出標識符的規范:

可以導出標識符以允許從另一個包訪問它。如果同時滿足以下條件,則會導出標識符:

  • 標識符名稱的第一個字符是 Unicode 大寫字母(Unicode 類“Lu”);和

  • 標識符在包塊中聲明,或者它是字段名稱或方法名稱。

不導出所有其他標識符。


查看完整回答
反對 回復 2021-07-12
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

這是因為 Go 模板引擎使用反射從它不“知道”的類型中獲取值。僅導出以大寫字母開頭的字段名稱,因此可用于反射模型。有關導出內容和不導出內容的規則的詳細信息,請參見此處:

[Where..]標識符名稱的第一個字符是Unicode大寫字母(Unicode類“Lu”)...

還有一些其他規定,但這是最重要的一項。


查看完整回答
反對 回復 2021-07-12
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

小寫在 Go 中意味著私有,因此模板代碼不允許訪問字段。


查看完整回答
反對 回復 2021-07-12
  • 3 回答
  • 0 關注
  • 257 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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