4 ms·
> everything from TLS to CSV is rolled into std without ever having to import a third-party repository And yet the std library is missing some basic data struc
by tejinderss 4y ago
> everything from TLS to CSV is rolled into std without ever having to import a third-party repository
And yet the std library is missing some basic data structures like Set.
- p-e-w 4y agoBecause they can't be properly implemented without generics, and generics were only shoehorned into Go a decade after its initial release.
- kasey_junk 4y agoThe go language has had generics since inception, just not user defined ones. If they wanted a set data structure they could have had it like they do maps and slices.
- XorNot 4y agoSet is just a Map though where you don't care about the values. var m[string]struct{} implements this for you. What you're really missing is the usual suite of helper methods which make sets ergonomic - and for that you need proper generics.
- masklinn 4y agoFwiw lots of folks dislike m[K]struct{}, because while it’s efficient checking for presence is horrible: _, present = m[k] It looks weird and is not an expressions. Obviously you could paper over this with a dedicated builtin function but that’s not great. A common alternative is m[string]bool, memory density is worse but contains/add/remove are easier to read and more convenient.
- masklinn 4y agoThey could be implemented as builtins, like channels, slices, and maps were. Though what's really missing is generic set functions, and a decision as to which "hashmap shape" is the blessed set (between map[T]struct{} and map[T]bool), a "set" builtin can just be an alias to that in the same way "any" is an alias for "interface{}".
- xanthrax 4y agoset := map[settype]struct{} This usually covers most cases I've seen for the use of sets