登录
首页 >  Golang >  Go问答

在本地地图中安全添加新的键值对方法

来源:stackoverflow

时间:2024-03-05 17:51:25 258浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《在本地地图中安全添加新的键值对方法》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我想从并发线程向 Golang 映射添加一个新的键值对。问题是,如果地图中存在密钥,我们不会创建新的密钥对。从多线程的角度来看,如何检查当前条件以及如果键不存在则插入键值。

有什么方法可以组织代码以在第一次遇到时安全地添加密钥?

主要问题是安全初始化互斥量


解决方案


有什么方法可以组织代码以在第一次遇到时安全地添加密钥?

没有。您需要正确的同步。

我建议结合使用 sync.Map 来存储键值,并在值内使用 sync.Once 来执行一次性初始化。

这是一个例子:

type Value struct {
    init       sync.Once
    someValue  string
}

func (v *Value) Init() {
    v.init.Do(func() {
        // This function will only be executed one time
        v.someValue = "initialized"
    })
}

func main() {
    var m sync.Map

    v1, _ := m.LoadOrStore("key", &Value{})
    v1.(*Value).Init() // init function is called

    v2, _ := m.LoadOrStore("key", &Value{})
    v2.(*Value).Init() // init function is not called
}

理论要掌握,实操不能落!以上关于《在本地地图中安全添加新的键值对方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>