灵活使用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())
}