func (s Int) Difference(s2 Int) Int {
	result := NewInt()
	for key := range s {
		if !s2.Has(key) {
			result.Insert(key)
		}
	}
	return result
}
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}
package sets
import (
	"reflect"
	"sort"
)
type Int map[int]Empty
func NewInt(items ...int) Int {
	ss := Int{}
	ss.Insert(items...)
	return ss
}
func IntKeySet(theMap interface{}) Int {
	v := reflect.ValueOf(theMap)
	ret := Int{}
	for _, keyValue := range v.MapKeys() {
		ret.Insert(keyValue.Interface().(int))
	}
	return ret
}
func (s Int) Insert(items ...int) Int {
	for _, item := range items {
		s[item] = Empty{}
	}
	return s
}
func (s Int) Delete(items ...int) Int {
	for _, item := range items {
		delete(s, item)
	}
	return s
}
func (s Int) Has(item int) bool {
	_, contained := s[item]
	return contained
}
func (s Int) HasAll(items ...int) bool {
	for _, item := range items {
		if !s.Has(item) {
			return false
		}
	}
	return true
}
func (s Int) HasAny(items ...int) bool {
	for _, item := range items {
		if s.Has(item) {
			return true
		}
	}
	return false
}