Re:Go 1.18
by yencabulator on Friday March 18, 2022 @03:59PM
(#30726813)
Now every range over your set is likely to be a bug. `map[T]bool` is simply a bad design to use.
Re:Go 1.18
by randomswede on Monday March 21, 2022 @09:37AM
(#30753955)
How? Why? If you use the map[T]bool, you obviously need to pay attention to the bool value, even in a range. Whereas in map[T]struct{} you don't need to pay attention to the values.
In either way, even with that type of data type underlying a set, I would (probably) provide a functional API to interact with it.
Re:Go 1.18
by yencabulator on Tuesday March 22, 2022 @11:19AM
(#30767138)
m["x"] = foo()
for k := range {
// if foo returned false, this is buggy
}
Re:Go 1.18
by randomswede on Wednesday March 23, 2022 @05:11AM
(#30776534)
Yes, as I said, if you use a map[T]bool, you need to use something like:
for k, v := range m { if v { } }
But it also allows you to use "if m[key] { ... }". It is literally a trade-off for what convenience you want. And in both cases, you should (probably) wrap an abstraction around the raw map.
But, that's one of those "requires extensive documentation" (and ideally, wrapping in a custom type and provide methods for checking and manipulating the set(s)).