GPT-OSS开源可控AI的产业落地与优化实践
2026/7/14 8:31:29
map是键值对(key-value)存储结构,也叫映射len()长度,没有 cap 容量go
// 声明格式:map [键类型]值类型 var 变量名 map[keyType]valueTypego
// 键int类型,值string类型 info := map[int]string{ 111: "mike", 110: "yoyo", // 最后一行逗号不能省略(Go语法要求) }go
// 仅定义类型,未分配内存,值为nil var m1 map[int]string // 注意:直接赋值 m1[1] = "test" 会报错!go
// 方式1:不指定长度 m2 := make(map[int]string) // 方式2:指定初始长度(优化性能,底层仍可自动扩容) m3 := make(map[int]string, 2)map 支持直接赋值,不存在的 key 会自动追加,底层自动扩容
go
// 初始化map m := map[int]string{1: "mike", 2: "yoyo"} // 修改已有key的值 m[1] = "c++" // 追加新key-value m[3] = "go"使用for range遍历,结果无序,支持只遍历 key / 只遍历 value
go
m := map[int]string{1: "mike", 2: "yoyo", 3: "go"} // 遍历key和value for key, value := range m { fmt.Printf("%d ======》 %s\n", key, value) } // 只遍历key for key := range m { fmt.Println("key:", key) } // 只遍历value for _, value := range m { fmt.Println("value:", value) }通过双返回值判断 key 是否存在,避免获取零值误判
go
m := map[int]string{1: "mike"} // value:key对应的值(不存在则为类型零值) // ok:bool类型,true=key存在,false=key不存在 value, ok := m[0] if ok { fmt.Println("key存在,值为:", value) } else { fmt.Println("key不存在") }使用内置函数delete(map, key),删除不存在的 key不会报错
go
m := map[int]string{1: "mike", 2: "yoyo"} // 删除key=1的键值对 delete(m, 1) // 删除不存在的key,无异常 delete(m, 100)map 是引用类型,函数内部修改 map(增删改),会影响外部原 map
go
package main import "fmt" // map作为函数参数 func test(m map[int]string) { delete(m, 1) // 函数内删除key } func main() { m := map[int]string{1: "mike", 2: "yoyo"} test(m) fmt.Println(m) // 输出:map[2:yoyo],原map被修改 }make初始化的 map(nil map),不能直接赋值delete()函数删除不存在的 key,不会触发错误