func (s StringSet) Add(val string) {
	s[val] = struct{}{}
}
Add adds val to the set if it does not already exist.
package stringset
import (
	"bytes"
	"errors"
	"reflect"
	"sort"
)
var ErrInvalidType = errors.New("invalid type")
type StringSet map[string]struct{}
func New(vals ...string) StringSet {
	s := make(StringSet)
	for _, val := range vals {
		s[val] = struct{}{}
	}
	return s
}
func FromSlice(sl interface{}) (StringSet, error) {
	v := reflect.ValueOf(sl)
	if v.Kind() != reflect.Slice {
		return nil, ErrInvalidType
	}
	if v.Type().Elem().Kind() != reflect.String {
		return nil, ErrInvalidType
	}
	s := make(StringSet, v.Len())
	for i := 0; i < v.Len(); i++ {
		s[v.Index(i).Interface().(string)] = struct{}{}
	}
	return s, nil
}
func FromMapKeys(m interface{}) (StringSet, error) {
	v := reflect.ValueOf(m)
	if v.Kind() != reflect.Map {
		return nil, ErrInvalidType
	}
	if v.Type().Key().Kind() != reflect.String {
		return nil, ErrInvalidType
	}
	s := make(StringSet, v.Len())
	for _, val := range v.MapKeys() {
		s[val.Interface().(string)] = struct{}{}
	}
	return s, nil
}
func FromMapVals(m interface{}) (StringSet, error) {
	v := reflect.ValueOf(m)
	if v.Kind() != reflect.Map {
		return nil, ErrInvalidType
	}
	if v.Type().Elem().Kind() != reflect.String {
		return nil, ErrInvalidType
	}
	s := make(StringSet, v.Len())
	for _, val := range v.MapKeys() {
		s[v.MapIndex(val).Interface().(string)] = struct{}{}
	}
	return s, nil
}