type String … // NewString creates a String from a list of values. func NewString(items ...string) String { … } // StringKeySet creates a String from a keys of a map[string](? extends interface{}). // If the value passed in is not actually a map, this will panic. func StringKeySet(theMap interface{ … } // Insert adds items to the set. func (s String) Insert(items ...string) String { … } // Delete removes all items from the set. func (s String) Delete(items ...string) String { … } // Has returns true if and only if item is contained in the set. func (s String) Has(item string) bool { … } // HasAll returns true if and only if all items are contained in the set. func (s String) HasAll(items ...string) bool { … } // HasAny returns true if any items are contained in the set. func (s String) HasAny(items ...string) bool { … } // Difference returns a set of objects that are not in s2 // For example: // s1 = {a1, a2, a3} // s2 = {a1, a2, a4, a5} // s1.Difference(s2) = {a3} // s2.Difference(s1) = {a4, a5} func (s String) Difference(s2 String) String { … } // Union returns a new set which includes items in either s1 or s2. // For example: // s1 = {a1, a2} // s2 = {a3, a4} // s1.Union(s2) = {a1, a2, a3, a4} // s2.Union(s1) = {a1, a2, a3, a4} func (s1 String) Union(s2 String) String { … } // Intersection returns a new set which includes the item in BOTH s1 and s2 // For example: // s1 = {a1, a2} // s2 = {a2, a3} // s1.Intersection(s2) = {a2} func (s1 String) Intersection(s2 String) String { … } // IsSuperset returns true if and only if s1 is a superset of s2. func (s1 String) IsSuperset(s2 String) bool { … } // Equal returns true if and only if s1 is equal (as a set) to s2. // Two sets are equal if their membership is identical. // (In practice, this means same elements, order doesn't matter) func (s1 String) Equal(s2 String) bool { … } type sortableSliceOfString … func (s sortableSliceOfString) Len() int { … } func (s sortableSliceOfString) Less(i, j int) bool { … } func (s sortableSliceOfString) Swap(i, j int) { … } // List returns the contents as a sorted string slice. func (s String) List() []string { … } // UnsortedList returns the slice with contents in random order. func (s String) UnsortedList() []string { … } // Returns a single element from the set. func (s String) PopAny() (string, bool) { … } // Len returns the size of the set. func (s String) Len() int { … } func lessString(lhs, rhs string) bool { … }