希望更好地理解地图。
给出以下代码:
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, 3)
m1 = make(map[string]Vertex)
m1["Bell Labs"] = Vertex{
40.68433, -74.39967,
}
m = append(m, m1)
fmt.Println(m)
fmt.Println(len(m))
fmt.Println(m[3]["Bell Labs"])
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出
[map[] map[] map[] map[Bell Labs:{40.68433 -74.39967}]]
4
{40.68433 -74.39967}
Run Code Online (Sandbox Code Playgroud)
为什么数组中的前3个元素是空/空映射,为什么不打印出来[map[Bell Labs:{40.68433 -74.39967}]]呢?
为什么数组中的前3个元素是空/空映射?
内置函数make的类型为T,该类型必须为slice,map或channel类型,并可以选择后面跟特定类型的表达式列表。它返回类型T的值(不是* T)。存储器按照有关初始值的部分中所述进行初始化。
Run Code Online (Sandbox Code Playgroud)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)
Run Code Online (Sandbox Code Playgroud)
相当于
m = make([]map[string]Vertex, 3, 3)
Run Code Online (Sandbox Code Playgroud)
它应该是
m = make([]map[string]Vertex, 0, 3)
Run Code Online (Sandbox Code Playgroud)
例如,
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"])
}
Run Code Online (Sandbox Code Playgroud)
游乐场:https://play.golang.org/p/i9f0rrCrtY_5
输出:
0 3
[map[Bell Labs:{40.68433 -74.39967}]]
1 3
{40.68433 -74.39967}
Run Code Online (Sandbox Code Playgroud)