package main import ( "fmt" "sync" ) type object interface{} type Set struct { m map[object]bool sync.RWMutex //线程安全实现,记录下 } //初始化 func New() *Set { return &Set{ m: map[object]bool{}, } } func (s *Set) Add(item object) { s.Lock() defer s.Unlock() s.m[item] = true } func (s *Set) Remove(item object) { s.Lock() defer s.Unlock() delete(s.m, item) } func (s *Set) Clean() { s.m = map[object]bool{} } func (s *Set) Len() int { return len(s.m) } func (s *Set) Contains(item object) bool { _, ok := s.m[item]; return ok } func (s *Set) IsEmpty() bool { fmt.Println(len(s.m)) return len(s.m) > 0 } func main() { s := New() fmt.Println(s.IsEmpty()) s.Add("aaa") fmt.Println(s.IsEmpty()) s.Add("1") s.Add("2") s.Add("3") fmt.Println(s.Contains("3")) //s.Clean() for key, _ := range s.m { fmt.Println("Key:", key) } }