Hi Val On Fri, Jun 24, 2016 at 2:48 PM, Val <delepl...@gmail.com> wrote: > 2 implementations here : > http://www.programming-idioms.org/idiom/10/shuffle-a-list/1564/go > > As for the map iteration trick, the runtime doesn't guarantee to randomize > anything, although it often tries to, so developers don't rely on some > specific order.
That's a nice feature and very helpful when writing tests... otherwise you end up with a test that works fine on one version/architecture and "suddenly" breaks later. Randomizing the order "on purpose" is probably also done for security reasons. Python works much the same, and some years ago, the CPython VM began randomizing the dict (map) type. The problem was that carefully crafted input would trigger a worst-case scenario in the hash table used behind the scenes and suddenly make your server crawl to a halt. The input could be HTTP headers, for example, with carefully chosen names: these are normally read from the client and used as keys in a map. With the right keys, you can trigger hash collisions and make the map allocate much more memory than you would expect with typical keys. Having the runtime add a bit of randomness to the keys prevents this scenario. When the randomness changes at every execution, it further helps the developers by highlighting the nondeterministic iteration order of the hash table. > I've seen (in the past) some map iterations consistently not > randomized at all. This behaviour may have evolved, but don't rely on it. That's good advice :-) -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.