for i := 0; i < 4000000000; i++ {
sum += i
}
Этот код слишком интенсивно нагружает процессор, из-за чего не происходит своевременное переключение между горутинами. Если вы добавите даже небольшую задержку в миллисекунду в этом цикле, все отработает как надо - пока будет спать одна горутина, будет выполняться другая.
Если версия Go <1.5 , скорее всего по умолчанию используется только 1 ядро процессора. Поэтому, 1 высоконагруженная горутина "мешает" работе всех прочих.
В Go >= 1.5 значение этой переменной по умолчанию равно числу ядер/потоков процессора. Можно так же попробовать самостоятельно поменять значение
runtime.GOMAXPROCS.
https://habr.com/ru/post/195574/