创建
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)
}
|