This is a creation in Article, where the information may have evolved or changed.
Package Setimport ("bytes" "FMT") func main () {}type HashSet struct {m map[interface{}]bool}func newhashset () *hashset {ret Urn &hashset{m:make (map[interface{}]bool)}}//Add true Add succeeded False add failed func (set *hashset) Add (E interface{}) (b bool {if!set.m[e] {set.m[e] = Truereturn true}return false}//remove func (set *hashset) remove (e interface{}) {Delete (SET.M, E)}/ /clear Func (set *hashset) Clear () {set.m = make (Map[interface{}]bool)}//contains func (set *hashset) Contains (e interface{}) bool {return set.m[e]}//gets the number of elements func (set *hashset) len () int {return Len (SET.M)}//determines two sets when the same//true same false func (set *hash Set) Same (other *hashset) bool {if-other = nil {return false}if set. Len ()! = other. Len () {return false}for k, V: = Range set.m {if!other. Contains (k) {return False}}return true}//iteration func (set *hashset) Elements () []interface{} {initlen: = Len (set.m) Snaphot: = M Ake ([]interface{}, Initlen) Actuallen: = 0for k, V: = Range SET.M {if Actuallen < Initlen {Snaphot[actuallen] = k} else {Snaphot= Append (Snaphot, k)}actuallen++}if Actuallen < Initlen {snaphot = Snaphot[:actuallen]}return snaphot}//gets its own string func ( Set *hashset) string () string {var buf bytes. Bufferbuf.writestring ("set{") First: = Truefor k, V: = Range SET.M {If first {first = false} else {buf. WriteString ("")}buf. WriteString (FMT. Sprintf ("%v", K))}buf. WriteString ("}") return BUF. String ()}