Разница между make (map) и map {} - PullRequest
0 голосов
/ 02 декабря 2018

Просто интересно, какая разница между:

z := make(map[*test] string)

и

z := map[*test] string{}

Я представляю себе вещи или они оба не действительны?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Спецификация языка программирования Go

Создание фрагментов, карт и каналов

Встроенная функция make принимает типT, который должен быть срезом, картой или типом канала, за которым может следовать список выражений для конкретного типа.Возвращает значение типа T (не * T).Память инициализируется, как описано в разделе о начальных значениях.

Call         Type T  Result
make(T)      map     map of type T
make(T, n)   map     map of type T with initial space for approximately n elements

Составные литералы

Составные литералы создают значения для структур, массивов, срезов и карт исоздавать новое значение каждый раз, когда они оцениваются.Они состоят из типа литерала, за которым следует список элементов в скобках.Каждому элементу может предшествовать соответствующий ключ.

map[string]int{}
map[string]int{"one": 1}

make - каноническая форма.Составные литералы представляют собой удобную альтернативную форму.

z := make(map[int]string)

и

z := map[int]string{}

эквивалентны.

0 голосов
/ 02 декабря 2018

Функция make() и инициализатор пустой карты идентичны.

Для инициализации пустой карты может использоваться тот же синтаксис, который функционально идентичен использованию функции make:

m = map[string]int{}

из https://blog.golang.org/go-maps-in-action

Использование указателя в качестве ключа карты допустимо, так как указатель сопоставим

Хотя, запомнитезначения, на которые указывают эти указатели, не проверяются:

Значения указателей сопоставимы.Два значения указателя равны, если они указывают на одну и ту же переменную или если оба имеют значение nil.Указатели на различные переменные нулевого размера могут совпадать или не совпадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...