我正在嘗試使用內置的 http/template 庫將結構傳遞到 Go 模板中。但是,我發現如果我用第一個字母小寫命名結構的變量,它們不會在模板中呈現,但如果我用第一個字母大寫命名它們,它們是。我在這里看到結構可以有大寫和小寫的首字母。那么,為什么 Go 模板引擎不同時渲染兩者呢?
3 回答

DIEA
TA貢獻1820條經驗 獲得超3個贊
簡而言之,模板引擎在成員以小寫形式編寫時無法看到成員,因為模板引擎位于與您的結構不同的另一個包中。
你可能已經注意到 Go 沒有使用private
orpublic
關鍵字來提高可見性。相反,當標識符的第一個字母為大寫時,所有函數、成員、變量等都是公共的。如果標識符未導出,則它們只能在同一個包中使用。
導出標識符的規范:
可以導出標識符以允許從另一個包訪問它。如果同時滿足以下條件,則會導出標識符:
標識符名稱的第一個字符是 Unicode 大寫字母(Unicode 類“Lu”);和
標識符在包塊中聲明,或者它是字段名稱或方法名稱。
不導出所有其他標識符。

HUX布斯
TA貢獻1876條經驗 獲得超6個贊
這是因為 Go 模板引擎使用反射從它不“知道”的類型中獲取值。僅導出以大寫字母開頭的字段名稱,因此可用于反射模型。有關導出內容和不導出內容的規則的詳細信息,請參見此處:
[Where..]標識符名稱的第一個字符是Unicode大寫字母(Unicode類“Lu”)...
還有一些其他規定,但這是最重要的一項。
- 3 回答
- 0 關注
- 257 瀏覽
添加回答
舉報
0/150
提交
取消