That part about the threading was a huge source of issues back in the early days. Goroutines could hop threads and it's the threads namespace/cgroup configuration that gets inherited when forking..
One of the gnarliest issues I recall was where network namespaces could occasionally not be cleaned up correctly. So "randomly" (but more likely under certain loads) the networking of a reused thread would get jacked and Docker could no longer pull images.
Never, ever, ever, write your own userland threading library.
(rule broken by almost every language in common use, unfortunately)
Plus Go's function for locking a goroutine to an OS thread was broken to the point where you could not safely rely on it for quite a while.