При вызове runtime.GOMAXPROCS (1) на ходу среда выполнения будет использовать только один поток для всех ваших горутин. При выполнении io ваши горутины уступят и позволят другим горутинам работать в том же потоке.
Мне это очень похоже на то, как функция .net Async CTP выполняет совместный параллелизм, если вы не используете фоновый поток.
Мой вопрос в том, какое преимущество или недостаток вы могли бы назвать одним методом перед другим.