同样,请注意用户对暴露内部状态的 map 或 slice 的修改。
Bad | Good |
type Stats struct {
mu sync.Mutex
counters map[string]int
}
func (s *Stats) Snapshot() map[string]int {
s.mu.Lock()
defer s.mu.Unlock()
return s.counters
}
snapshot := stats.Snapshot()
|
type Stats struct {
mu sync.Mutex
counters map[string]int
}
func (s *Stats) Snapshot() map[string]int {
s.mu.Lock()
defer s.mu.Unlock()
result := make(map[string]int, len(s.counters))
for k, v := range s.counters {
result[k] = v
}
return result
}
snapshot := stats.Snapshot()
|
最后编辑: kuteng 文档更新时间: 2021-05-09 20:12 作者:kuteng