Почему первые 3 элемента в массиве являются пустыми / нулевыми картами?
Спецификация языка программирования Go
Создание срезов, карт и каналов
Встроенная функция make принимает тип T, который должен быть типом среза, карты или канала, за которым может следовать типсписок выражений.Возвращает значение типа T (не * T).Память инициализируется, как описано в разделе о начальных значениях.
Call Type T Result
make(T, n) slice slice of type T with length n and capacity n
make(T, n, m) slice slice of type T with length n and capacity m
Срез m
из map
m = make([]map[string]Vertex, 3)
эквивалентен
m = make([]map[string]Vertex, 3, 3)
должно быть
m = make([]map[string]Vertex, 0, 3)
Например,
package main
import "fmt"
type Vertex struct {
Lat, Long float64
}
var m []map[string]Vertex
var m1 map[string]Vertex
func main() {
m = make([]map[string]Vertex, 0, 3)
fmt.Println(len(m), cap(m))
m1 = make(map[string]Vertex)
m1["Bell Labs"] = Vertex{
40.68433, -74.39967,
}
m = append(m, m1)
fmt.Println(m)
fmt.Println(len(m), cap(m))
fmt.Println(m[0]["Bell Labs"])
}
Детская площадка: https://play.golang.org/p/i9f0rrCrtY_5
Выход:
0 3
[map[Bell Labs:{40.68433 -74.39967}]]
1 3
{40.68433 -74.39967}