«назначение записи на карте nil» с простым назначением интерфейса не работает

Я пытаюсь ознакомиться с interface{} в Go. Я пытался:

         var  m  map[string]string
         m["time"] = "asdf"

и получить ошибку:

присвоение записи в нулевой карте

Я не уверен, почему я получаю сообщение об ошибке.

1. Ваша ошибка означает, что вы пытаетесь присвоить нулевой карте. m — нулевая карта, потому что вы не присвоили ей никакого значения. Google для этой ошибки, и вы найдете бесчисленное множество объяснений исправления. 2. В вашем коде или вопросе нет интерфейсов, поэтому заголовок не имеет смысла.

Jonathan Hall 25.12.2020 18:23

когда переменная объявляется без добавления к ней значения, она имеет значение по умолчанию. В вашем случае значение карты по умолчанию равно нулю. Проверьте эту ссылку на значения по умолчанию для всех типов Go. yourbasic.org/golang/default-zero-value

Emin Laletovic 25.12.2020 18:25

м := карта[строка]строка{}

user4466350 25.12.2020 18:28
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
3
3
482
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Значение карты m равно нулю.

Функция make выделяет и инициализирует структуру данных хэш-карты и возвращает значение карты, указывающее на нее.

m := make(map[string]string)
m["time"] = "asdf"

Прочтите распределения в разделе make спецификаций.

Вам нужно использовать make (встроенную функцию), например make(map[string]string, 0) для инициализации карты

https://golang.org/doc/efficient_go.html#allocation_makehttps://golang.org/doc/efficient_go.html#maps

Ответ принят как подходящий

Когда вы объявляете переменную следующим образом:

var  m  map[string]string

вашей переменной m присваивается значение по умолчанию map, то есть nil, а не пустая карта. Вот почему вы получаете эту ошибку, вы пытаетесь добавить значение к нулевой карте.

Чтобы инициализировать пустую карту, вы можете попробовать любой из них:

var m map[string]string = map[string]string{}
m := make(map[string]string)
m := map[string]string{}

Здесь статья о значениях по умолчанию для всех типов Go.

Другие вопросы по теме