Just for discussion:

I prepared a branch with the functional variant without synchronization I talked about: https://github.com/arnehormann/goset/blob/master/set.go

There's some unexported operation on an unexported type which directly maps to map[interface{}]struct{}. These are used in a threadsafe way to build the results of the other operations. That's pretty much how I would have built it on my own, what I consider the best api and what is probably pretty performant compared to this version (though it maybe allocates more) because it NEVER hits any kind of lock.

I also removed all dependencies, a call to List() should create a presentable structure usable by fmt.Printf. The slice filter operations can be recreated by mapping over the result of List().

No tests, wrong docs.