当尝试将此结构与多个 goroutine 一起使用时,有时我会遇到以下错误之一:
fatal error: concurrent map read and map write
或者
concurrent map writes
阅读此线程后,我确保在构造函数中返回一个引用并将引用传递给接收者。
使用它的全部代码都在这个 github repo中
type concurrentStorage struct {
sync.Mutex
domain string
urls map[url.URL]bool
}
func newConcurrentStorage(d string) *concurrentStorage{
return &concurrentStorage{
domain: d,
urls: map[url.URL]bool{},
}
}
func (c *concurrentStorage) add(u url.URL) (bool) {
c.Lock()
defer c.Unlock()
if _, ok := c.urls[u]; ok{
return false
}
c.urls[u] = true
return true
}
翻翻过去那场雪
相关分类