Hi,
another thing to keep in mind is that `GOMAXPROCS=1` does not actually make your program single-threaded:
The GOMAXPROCS variable limits the number of operating system threads that can execute user-level Go code simultaneously. There is no limit to the number of threads that can be blocked in system calls on behalf of Go code; those do not count against the GOMAXPROCS limit.
So, as long as your program uses blocking syscalls (the overwhelming majority of Go programs do), the runtime will still spawn multiple threads. So if you have, say, multiple Goroutines that read from files, the order in which the `Read` calls return is probably non-deterministic.
FWIW, the playground used to be completely deterministic. Recently it started using gVisor though and I don't know how deterministic this new runtime is. But with a sufficiently old Go version you can get deterministic execution by compiling to NaCl.