文章

字典

创建

Map创建了没有赋值,编译器会报错

1
2
3
4
5
6
7
8
9
10
11
//1.make函数创建 (推荐)
var map2 = make(map[string]string)   //make创建会直接初始化,值为nil

//2.创建同时初始化 (有确定的键值时推荐)
var map3 = map[string]int{"Go":100,"java":90} // 有这些键值时使用

//3.var常量定义 (不推荐)
var map1 map[int]string //创建但未初始化,集合为nil

fmt.Println(map1 == nil) //true
fmt.Println(map2 == nil) //false

优化点: 使用 map[string]struct{} 代替 map[string]bool 可以减少内存占用

1
2
remainPlatGoodsIds["id1"] = struct{}{}
remainPlatGoodsIds["id2"] = struct{}{}

ok-idiom

使用 value, ok := map[key] 的语法保证百分之百安全

1
2
3
4
//通过ok-idiom来判断key value是否存在,并获取map
if value, ok := map1[1]; ok {
    fmt.Println("map key存在,其值为:", value)
}

示例

1
2
3
4
5
6
7
8
9
10
11
const (
	PigeonUserMessageSync = "19003" 
)

var MessageStatusMap = map[string]struct{}{ 
	PigeonUserMessageSync: struct{}{},
}
// 判断
if _, ok := message.MessageStatusMap[tag]; ok {
    //tag="19003"
}

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func getSendChannel(action *model.ActionInfo) sendChannel {
	if action == nil {
		return sendChannelMqtt
	}
    // 百分之百安全
	if channelVal, ok := action.ExtraData["channel"]; ok {
		ch := sendChannel(channelVal)
		switch ch {
		case sendChannelPulsar, sendChannelMqtt:
			return ch
		}
	}
	return sendChannelMqtt
}

遍历

1
2
3
4
5
6
7
8
9
10
11
12
// 只遍历 key
for key := range paramMap {
	fmt.Println(key, paramMap[key])
}
// 遍历key,value
for key, value := range paramMap {
	fmt.Println(key, value)
}
// 只遍历value
for _, value := range paramMap {
	fmt.Println(value)
}

© 2024- lfj