По умолчанию, в Go все goroutines выполняются в одном потоке (thread) по очереди. Так что формально это однопоточная программа, хотя и имеет пять независимых путей исполнения. Количество os threads задается через GOMAXPROCS.
Да в документации такое есть, но вот что еще интереснее. Я создал 10 горутин на 2ядерном CPU и когда запускаю ps -fL я вижу 10 потоков. Использовал golang 1 из debian testing.
> TCP/IP proxy
Я вспомнил, как 4 года назад на Delphi писал первую программу, которая напрямую вызывает функции стека, не пользуясь готовыми объектами. Это был как раз таки однопоточный портовый прокси с дампом данных. Эту программу я использовал для дебага и реверс инженеринга. И до сих пор ей пользуюсь.
Go подталкивает на многопоточное программирование (а не отталкивает, как C++, даже на стероидах нового стандарта).
Голый С++ может и отталкивает от потоков.
Но библиотеки типа boost.asio наоборот позволяют элементарно писать многопоточные программы без явной низкоуровневой синхронизации.
TCP/IP proxy на Go