小编Rus*_*sel的帖子

如果键始终是唯一的,同时写入 Golang 映射是否安全?

package main

import (
    "sync"
    "fmt"
)

var m = make(map[string]string)

var seen = make(map[string]bool)

func main() {
    wg := new(sync.WaitGroup)
    wg.Add(1)
    ch := make(chan string)
    go deduplicate(ch, wg)

    toAdd := []string{"foo", "bar", "baz", "foo"}
    for _, s := range toAdd {
        ch <- s
    }
    wg.Wait()
    fmt.Println(m)
}

func deduplicate(ch chan string, wg *sync.WaitGroup) {
    for s := range ch {
        if seen[s] {
            wg.Done()
            continue
        }
        seen[s] = true
        go write(s)
    }
}

func write(s string) {
    m[s] …
Run Code Online (Sandbox Code Playgroud)

concurrency channel go

7
推荐指数
1
解决办法
4976
查看次数

标签 统计

channel ×1

concurrency ×1

go ×1