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

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

獲取“未導出字段的隱式分配”

獲取“未導出字段的隱式分配”

Go
慕容森 2022-06-01 11:31:50
package mainmain.goimport (    "fmt"    "practice/pkg")func main() {    mk := pkg.MustKey{map[string]string{"Hello": "bar"}}    fmt.Printf("%v\n", mk)}pkg 包你好.gopackage pkgtype MustKey struct {    m map[string]string}在執行以下操作時,我收到主題行中提到的錯誤。任何幫助將不勝感激。
查看完整描述

3 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

在這段代碼中:


type MustKey struct {

   m map[string]string

}

map 變量是小寫的,因此它是未導出的(并且僅對該包私有)。在 Golang 中,要將任何字段從一個 pkg 導出到另一個,我應該使用大寫。


兩種解決方案:


1) 以大寫形式聲明 Map 字段,例如:


type MustKey struct {

   // m map[string]string

   // Upper case fields can be export to other packages

   M map[string]string 

}

2)將您的結構包裝在一個函數中并導出函數名稱。


查看完整回答
反對 回復 2022-06-01
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

MustKey.m是一個未導出的字段。您正在嘗試初始化該字段而不使用 pkg.MustKey{map[string]string{"Hello": "bar"}}.


您要么必須通過將字段重命名為 來導出字段M,要么必須定義一個構造函數,將其設置在包中:


func NewMustKey(m map[string]string) MustKey {

   return MustKey{m:m}

}


查看完整回答
反對 回復 2022-06-01
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

Go 中有一條非常重要的規則——如何導出/取消導出任何函數/方法/字段。


出口- 當名稱以大寫字母開頭時(說它公開)

u nexport - 當名稱以小寫字母開頭時(說它是 Private)

因此,在您的情況下,結構類型名稱MustKey是可導出的(以大寫字母開頭M)并且可以在您定義的 package 之外訪問pkg。但是結構中的 map 變量m確實以 small 開頭m,因此它不能在包外部訪問,并且只能對該包私有。


因此,您有 2 個解決方案:


使用M而不是m,例如:

    type MustKey struct {

        M map[string]string

    }

或者,如果您仍然希望映射變量私有 - 使用導出的方法和接口的幫助

    type MustKey struct {

        m map[string]string

    }


    func (mk *MustKey) GetValue(key string) (string, error) {

        value, ok := m[key]

        if !ok {

            return "", fmt.Errorf("Key is not available: %s", key)

        }

        return value, nil

    }


    func (mk *MustKey) SetValue(key, value string) {

        m[key] = value

    }

您可以使用這些 Get 和 Set 方法來放置您自己的邏輯。


閱讀此內容以獲得更好的理解。


查看完整回答
反對 回復 2022-06-01
  • 3 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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