GO中的地图是一种内置的关联数据类型,可让您存储键值对。它们被实现为哈希表,可有效访问存储在它们中的值。地图是无序的,这意味着在程序执行过程中,密钥和值的顺序可能会发生变化。
要在GO中创建地图,您可以将make
函数与map
关键字一起使用。宣布地图的语法如下:
<code class="go">myMap := make(map[keyType]valueType)</code>
在这里, keyType
是键的类型,而valueType
是值的类型。例如,为整数创建字符地图:
<code class="go">ages := make(map[string]int)</code>
您还可以在声明时使用复合文字来初始化具有值的映射:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, }</code>
要将键值对添加到地图中,您可以使用以下语法:
<code class="go">ages["Charlie"] = 35</code>
要从地图检索值,您可以使用密钥:
<code class="go">age := ages["Alice"]</code>
如果您尝试检索地图中不存在的键的值,则将获得值类型的零值。要在访问其值之前检查键是否存在,您可以使用多价分配:
<code class="go">age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
要从地图中删除键值对,您可以使用delete
函数:
<code class="go">delete(ages, "Bob")</code>
在GO编程中使用地图提供了一些关键好处:
len
获取条目数量,并delete
以删除条目。为了在GO中有效迭代地图,您可以在for
循环中使用range
关键字。 range
关键字允许您访问地图中每个条目的密钥和值。这是一个示例:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, "Charlie": 35, } for key, value := range ages { fmt.Printf("Name: %s, Age: %d\n", key, value) }</code>
这将迭代地图中的所有键值对,打印出每个名称和年龄。请注意,由于地图本质上是无序的,因此不能保证访问键值对的顺序。
如果您只需要在键上迭代,则可以使用以下语法:
<code class="go">for key := range ages { fmt.Printf("Name: %s\n", key) }</code>
如果您只需要迭代值,则可以使用空白标识符_
进行密钥:
<code class="go">for _, value := range ages { fmt.Printf("Age: %d\n", value) }</code>
在GO中使用地图时,应该避免几个常见的错误:
不检查关键存在:从地图检索值时,很容易忘记检查键是否存在。不这样做会导致代码中使用意外的零值。
<code class="go">// Incorrect age := ages["David"] // If "David" doesn't exist, age will be 0 // Correct age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
并发写作:在没有适当同步的情况下从多个goroutines写入地图会导致种族条件和不确定的行为。
<code class="go">// Incorrect go func() { ages["Eve"] = 40 }() go func() { ages["Frank"] = 45 }() // Correct var mutex sync.Mutex go func() { mutex.Lock() ages["Eve"] = 40 mutex.Unlock() }() go func() { mutex.Lock() ages["Frank"] = 45 mutex.Unlock() }()</code>
使用不可拍照的类型作为密钥:地图需要键可比,因此使用诸如切片或地图(如密钥)(例如键)将导致编译误差。
<code class="go">// Incorrect invalidMap := make(map[[]int]int) // Will not compile // Correct validMap := make(map[string]int)</code>
忽略地图初始化:尝试在不正确初始化的情况下使用地图将导致运行时恐慌。
<code class="go">// Incorrect var ages map[string]int ages["Alice"] = 30 // This will panic // Correct ages := make(map[string]int) ages["Alice"] = 30</code>
通过避免这些常见的错误,您可以在GO程序中有效,安全地使用地图。
以上是GO中有什么地图?您如何创建和使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!