知识点:根据key查找map中的value
value, ok := c.v[key]
并发使用安全的结构体的声明
// SafeCounter 的并发使用是安全的。 type SafeCounter struct { v map[string]int mux sync.Mutex }
package safecounter
import (
"sync"
)
// SafeCounter 的并发使用是安全的。
type SafeCounter struct {
v map[string]int
mux sync.Mutex
}
// Inc 增加给定 key 的计数器的值。
func (c *SafeCounter) Inc(key string) {
c.mux.Lock()
value, ok := c.v[key]
if ok {
c.v[key] = value + 1
}else {
c.v[key] = 1
}
c.mux.Unlock()
}
// Value 返回给定 key 的计数器的当前值。
func (c *SafeCounter) Value(key string) int {
var re int
c.mux.Lock()
value2, ok := c.v[key]
if ok {
re =value2
}else {
return 0
}
c.mux.Unlock()
return re
}
测试
package safecounter
import (
"time"
"fmt"
"testing"
)
func TestNewSafeMap(t *testing.T){
c := SafeCounter{v: make(map[string]int)}
for i := 0; i < 1000; i++ {
go c.Inc("somekey")
}
time.Sleep(time.Second)
fmt.Println(c.Value("somekey"))
}