灵活使用map结构可实现Set, 妙用匿名 struct{},因为不占用任何空间。为了类型安全可以将key改成您想要的类型
不多说了,直接上代码哈。
type Set map[interface{}]struct{}
func (s *Set)Add(k interface{}) {
(*s)[k] = struct{}{}
}
func (s *Set)Remove(k interface{}){
delete((*s),k)
}
func (s *Set)Has(k interface{}) bool {
_,ok := (*s)[k]
return ok
}
func (s *Set)IsEmpty() bool {
return 0 == len(*s)
}
func (s *Set)Len() int {
return len(*s)
}
func (s *Set)All() []interface{} {
var list []interface{}
for i, _ := range *s {
list = append(list,i)
}
return list
}
func main() {
var s Set =Set{}
s.Add("sss")
s.Add("sss")
s.Add("sss2")
s.Add("sss4")
s.Add(123)
stu := struct{Name string;Age int}{Name: "someone",Age: 32}
s.Add(stu)
fmt.Println(s.All())
}