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.
[ Parent
| on HN ]
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.