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)將您的結構包裝在一個函數中并導出函數名稱。

TA貢獻1816條經驗 獲得超4個贊
MustKey.m是一個未導出的字段。您正在嘗試初始化該字段而不使用 pkg.MustKey{map[string]string{"Hello": "bar"}}.
您要么必須通過將字段重命名為 來導出字段M,要么必須定義一個構造函數,將其設置在包中:
func NewMustKey(m map[string]string) MustKey {
return MustKey{m:m}
}

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 方法來放置您自己的邏輯。
閱讀此內容以獲得更好的理解。
- 3 回答
- 0 關注
- 116 瀏覽
添加回答
舉報