В Go есть очень важное правило - как экспортировать / экспортировать любые функции / методы / поля.
- E xport - когда имя начинается с Прописная буква (произнесите это Publi c)
- u nexport - когда имя начинается с маленькой буквы (произнесите это Private)
Так в вашем В этом случае имя типа структуры MustKey
является экспортируемым (начинается с заглавной буквы M
) и может быть доступно вне определенного вами пакета pkg
. Но переменная map m
внутри структуры начинается с небольшого 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, чтобы поместить свои собственные логи c.
Прочитайте это для хорошего понимания.