golang map

Go 语言中的 map 是一种内置的数据结构,用于存储键值对(key-value pairs)。它类似于其他语言中的字典(Python)、哈希表(Java)或关联数组(PHP)。map 提供了高效的查找、插入和删除操作,是 Go 语言中非常常用的数据结构之一。

(1)键值对存储:map 存储的是一组键值对,键(key)和值(value)可以是任意类型。
(2)键的唯一性:map 中的键必须是唯一的,不能重复。
(3)无序性:map 中的键值对是无序的,遍历时顺序不固定。
(4)动态大小:map 的大小是动态的,可以根据需要自动扩容。

var m map[keyType]valueType

keyType:键的类型。
valueType:值的类型。

var m map[string]int // 声明一个键为 string、值为 int 的 map
m := make(map[string]int)
m := map[string]int{
    "apple":  5,
    "banana": 3,
}

插入或更新元素

m["apple"] = 10 // 插入或更新键 "apple" 的值为 10

获取元素

value := m["apple"] // 获取键 "apple" 对应的值

检查键是否存在

value, exists := m["apple"]
if exists {
    fmt.Println("apple 的值是:", value)
} else {
    fmt.Println("apple 不存在")
}

删除元素

delete(m, "apple") // 删除键 "apple" 及其对应的值

遍历 Map

for key, value := range m {
    fmt.Printf("key: %s, value: %d\n", key, value)
}

如果声明了一个 map 但没有初始化,它的零值是 nil。对 nil 的 map 进行操作会导致运行时错误(panic)。

var m map[string]int
m["apple"] = 5 // 运行时错误:panic: assignment to entry in nil map

如果需要并发读写 map,可以使用 sync.Map:

package main

import (
	"fmt"
	"sync"
)

func main() {
	var m sync.Map

	// 存储值
	m.Store("apple", 5)
	m.Store("banana", 3)

	// 加载值
	if value, ok := m.Load("apple"); ok {
		fmt.Println("apple 的值是:", value)
	}

	// 遍历
	m.Range(func(key, value interface{}) bool {
		fmt.Printf("key: %v, value: %v\n", key, value)
		return true
	})
}

你可能感兴趣的:(C++,golang,开发语言,后端)