• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

速战速决 go - go 容器: 字典(字典的增删改查和遍历,以及字典的线程安全) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

示例如下:

container/map.go

// go 容器 - 字典(字典的增删改查和遍历,以及字典的线程安全)

package container

import (
	"fmt"
	"sync"
)

func MapSample() {
	map_sample1()
	map_sample2()
}

// map 的增删改查和遍历
// map 在多线程场景下是线程不安全的
func map_sample1() {
	// 声明一个 map 并初始化
	var a map[string]string = map[string]string{"k1": "v1", "k2": "v2"}
	// 新增或修改 key/value
	a["k1"] = "v111"
	a["k3"] = "v3"
	fmt.Println(a, a["k1"]) // map[k1:v111 k2:v2 k3:v3] v111

	// 获取 map 中指定 key 的值,以及 map 中是否包含指定 key
	k1_value, k1_exists := a["k1"]
	_, k8_exists := a["k8"]
	fmt.Println(k1_value, k1_exists, k8_exists) // v111 true false

	// 删除 map 中的指定 key
	delete(a, "k1")

	// 遍历 map
	for k, v := range a {
		fmt.Println(k, v)
	}
	// k2 v2
	// k3 v3

	// 通过 make 构造一个 map
	b := make(map[int]string)
	b[0] = "a"
	fmt.Println(b) // map[0:a]

	// 需要完全清空 map 的话就给他一个空 map 即可
	b = make(map[int]string)
	fmt.Println(b) // map[]
}

// sync.Map 的增删改查和遍历
// sync.Map 在多线程场景下是线程安全的
func map_sample2() {
	// sync.Map 是 struct 类型
	// sync.Map 是线程安全的
	var a sync.Map

	// 新增或修改 key/value
	a.Store("k1", "v1")
	a.Store("k2", "v2")
	a.Store("k3", "v3")
	a.Store("k1", "v111")

	// 删除指定的 key
	a.Delete("k2")

	// 获取 sync.Map 中指定 key 的值,以及 sync.Map 中是否包含指定 key
	k1_value, k1_exists := a.Load("k1")
	fmt.Println(k1_value, k1_exists) // v111 true

	// 遍历 sync.Map
	a.Range(func(k, v interface{}) bool {
		fmt.Println(k, v)
		return true
	})
	// k3 v3
	// k1 v111
}

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
凭借“B站源码泄露”事件,go语言重回大众视野发布时间:2022-07-10
下一篇:
深度分析 [go的HttpClient读取Body超时]发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap