Files
bulma/composite_map.go

79 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"math"
"sync"
)
func main() {
// 映射创建
m1 := make(map[string]int) // make创建
m2 := map[string]int{ // 字面量初始化
"apple": 5,
"banana": 3,
}
// 添加和修改元素
m1["orange"] = 2
m2["apple"] = 6 // 修改已有键的值
// 访问元素
fmt.Println("m1[orange]:", m1["orange"]) // 2
fmt.Println("m2[banana]:", m2["banana"]) // 3
// 判断键是否存在
v, ok := m2["orange"]
if ok {
fmt.Printf("orange count: %d\n", v)
} else {
fmt.Println("orange not found") // 输出该结果
}
// 删除元素
delete(m2, "banana")
fmt.Println("删除后m2[banana]:", m2["banana"]) // 0(零值)
// 映射长度
fmt.Println("m2长度:", len(m2)) // 1
// 映射遍历(无序)
fmt.Println("map遍历:")
for fruit, count := range m2 {
fmt.Printf("%s: %d\n", fruit, count) // 顺序不固定
}
// 映射的键类型限制
var m3 map[int]string // 整数
var m4 map[string]bool // 字符串
var m5 map[bool]int // 布尔值
var m6 map[[3]int]string // 数组(元素类型也必须可比较)
// 结构体作为键(所有字段都必须可比较)
type Point struct {
X, Y int
}
var m7 map[Point]string
fmt.Printf("m3:%T, m4:%T, m5:%T\n", m3, m4, m5)
fmt.Printf("m6:%T, m7:%T\n", m6, m7)
// 特殊情况:NaN作为键(每个NaN都是唯一的)
m := map[float64]string{}
nan1 := math.NaN()
nan2 := math.NaN()
m[nan1] = "first"
m[nan2] = "second"
fmt.Println("NaN映射长度:", len(m)) // 2
// 并发安全映射(sync.Map
var m8 sync.Map
m8.Store("cat", 2) // 存储键值对
m8.Store("dog", 1)
// 读取与删除
if v, ok := m8.Load("cat"); ok {
fmt.Printf("cat count: %d\n", v) // 输出2
}
m8.Delete("dog")
}