Go 开发常用操作技巧--map
2023-06-13 09:16:39 时间
map 是一种特殊的数据类型,它是一种元素对的「无序」集合,元素对为 键(key)值(value) 形式。我们可以通过 key 来快速找到与之对应的 value。
map 是引用类型,声明方式:
var name map[key_type]value_type
,name 为map的变量名,key_type 为键类型,value_type 为键对应的值类型。声明时可以不需要指定 map 的长度,因为 map 是可以动态增长的。未初始化的 map 的值是 nil。
检查一个键是否在 map 中
检查一个 key 在 map 主要是通过下面的方式:
if v, ok := map[key]; ok{
// 存在
}
ok 为 true 表示存在,key 对应的值为 v,若不需要获取值则可以用 '_'代替,即:if _, ok := map[key]; ok{}
json 与 map 互转
- json 转 map:
package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonStr := `
{
"name":"test",
"address":"beijing"
}`
var mapRes map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &mapRes)
if err != nil {
fmt.Println(err)
}
fmt.Println(mapRes)
}
运行结果:
map[address:beijing name:test]
- map 转 json:
package main
import (
"encoding/json"
"fmt"
)
func main() {
mapRes := map[string]interface{}{
"name": "test",
"address": "beijing",
}
jsonStr, err := json.Marshal(mapRes)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(jsonStr))
}
运行结果:
{"address":"beijing","name":"test"}
map 排序
Go 语言中,map 是无序的,如果需要对 map 进行排序,实现的思路是:将 map 中的 key 复制到一个切片中,然后对此切片进行排序,再遍历此切片,获取对应的 key 、value。
示例:
package main
import (
"fmt"
"sort"
)
func main() {
mapRes := make(map[int]int,5)
mapRes[0] = 1
mapRes[1] = 3
mapRes[2] = 2
var temp []int
for _,v := range mapRes{
temp = append(temp,v)
}
sort.Ints(temp)
for k, v := range temp {
fmt.Println(k, v)
}
}
运行结果:
0 1
1 2
2 3
map 类型的切片
如果要使用一个 map 类型的切片,必须使用两次 make() 函数,一次分配切片,一个分配切片中的每个 map 元素。
示例:
package main
import "fmt"
func main() {
sli := make([]map[int]int, 3)
for i := range sli {
sli[i] = make(map[int]int, 6)
sli[i][1] = 1+i
sli[i][2] = 2+i
}
fmt.Printf("value:%v\n", sli)
}
图片及部分相关技术知识点来源于网络搜索,侵权删!
相关文章
- Go 函数(Go面试系列)
- Go-Excelize API源码阅读(二十三)——SetDocProps、GetDocProps
- 有序的Map集合_map集合特点
- 【Go实现】实践GoF的23种设计模式:访问者模式
- 【Go】sync.WaitGroup 源码阅读
- 我在公司里用 Go 给 Dubbo 写中间件
- go struct转map_golang map
- GoLang15 - Go语言范围(Range)
- go中的fatal error:concurrent map read and map write
- Go常见错误集锦之map
- 「Go工具箱」通过这个工具包,你就能了解每天使用的表情符号是怎么来的
- Go错误集锦 | 处理error时有哪些常见的陷阱
- 「Go工具箱」一个简单、易用的多错误管理包:go-multierror
- GO语言开篇-Go语言急速入门(基础知识点)| 青训营笔记
- Go语言宕机恢复(recover)——防止程序崩溃
- Go语言反射规则浅析
- Go从入门到精通(一)go语言初识详解编程语言
- 编程新精英:Go语言 Redis开发(go语言redis开发)
- 以Go语言操作MySQL:轻松运行数据库各种查询(go语言mysql)
- 解决Redis频繁修改Map难题(redis频繁修改map)
- 基于Redis集群的Map数据结构的删除(redis集群map删除)