首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user