更改地图数据时如何防止死锁

软邮

我尝试编写一个验证数据的函数。看下面的代码:

func Create(name, email, password, local string, termOf bool) map[string]string {

    wait := new(sync.WaitGroup)
    mutex := new(sync.Mutex)
    errMsg := make(map[string]string)

    if !termOf {
        mutex.Lock()
        errMsg["termOf"] = translate(local, "text06")
        mutex.Unlock()
    }

    wait.Add(1)
    go func() {
        err := ValidateName(name, local)
        mutex.Lock()
        errMsg["name"] = err.Error()
        mutex.Unlock()
        wait.Done()
    }()

    wait.Add(1)
    go func() {
        err := ValidateEmail(email, local)
        mutex.Lock()
        errMsg["email"] = err.Error()
        mutex.Unlock()
        wait.Done()
    }()

    wait.Add(1)
    go func() {
        err := ValidatePassword(password, local)
        mutex.Lock()
        errMsg["password"] = err.Error()
        mutex.Unlock()
        wait.Done()
    }()

    wait.Wait()

    // If errors appear
    if len(errMsg) > 0 {
        return errMsg
    }

    return nil
}

如您所见,我使用三个goroutine,并在goroutine中将其锁定以更改errMsg变量映射类型。运行函数时,出现编译器错误

runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x14 pc=0x44206a]

但是,当我在goroutine中删除所有errMsg插入内容时,该函数就会起作用。我不知道我做错了的原因。

这是可能的errnil从返回时ValidateName()ValidateEmail()ValidatePassword()调用。

您应先进行检查,err != nil然后再将其添加到地图中。

if err != nil {
    mutex.Lock()
    errMsg["xxx"] = err.Error()
    mutex.Unlock()
}

换句话说,这不是errMsg问题所在,而是您要输入的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改地图的子地图的值?

来自分类Dev

Openlayers 3:更改地图范围时出现的问题

来自分类Dev

如何更改地图容器的内部排序方案?

来自分类Dev

使用mapbox js,如何更改地图样式?

来自分类Dev

如何在ggplot中更改地图的大小

来自分类Dev

在Android中更改地图API密钥时未加载地图

来自分类Dev

更改地图视图而不更改位置

来自分类Dev

如何更改地图的键和值以更改其大小写

来自分类Dev

更改地图D3的颜色

来自分类Dev

更改地图颜色的宏(状态)

来自分类Dev

在Cartopy中更改地图边界颜色

来自分类Dev

在ggplot中更改地图颜色

来自分类Dev

更改地图边界Google Maps API

来自分类Dev

更改地图图钉(颜色或图像)

来自分类Dev

用jQuery更改地图地址

来自分类Dev

更改地图样式(Mapbox)时,MGLMapView隐藏/无法加载注释

来自分类Dev

使用wxCRIT_SECT_LOCKER时如何防止死锁

来自分类Dev

当客户端崩溃时,如何防止事务死锁?

来自分类Dev

如何更改地图的“地方自动完成”搜索的字体系列?

来自分类Dev

Flutter Google Maps:如何在运行后更改地图类型?

来自分类Dev

单击React Leaflet v.3.x中的标记时,如何动态更改地图缩放?

来自分类Dev

合并数据集时如何防止SAS更改值

来自分类Dev

设置xlim时如何防止histogram()更改数据

来自分类Dev

Terraform-如何修改地图键?

来自分类Dev

如何在android中同时更改地图上所有标记的颜色?如何只更改某些标记的颜色?

来自分类Dev

Groovy在迭代地图时修改地图元素

来自分类Dev

以后可以在C ++中更改地图的排序标准吗?

来自分类Dev

使用Spectre递归更改地图中的值

来自分类Dev

我想更改地址以协调显示在Google地图上

Related 相关文章

热门标签

归档