C printf
реализован в libc с использованием системных вызовов более низкого уровня. libc имеет буферы для ввода / вывода для повышения производительности, и она решает, когда очищать эти буферы (в частности, поток stdout, в который printf
испускается, буферизуется).
Go имеет свой собственный printf
, использующий системные вызовы более низкого уровня, для этого он вообще не использует C printf
или libc. Поэтому его решения по очистке отделены от C printf
.
Так что, на самом деле, здесь нет проблем. printf
не гарантирует небуферизованный вывод (вы можете использовать поток ошибок для этого, при необходимости, явно сбрасывать), поэтому нет гарантированного упорядочения между версиями C и Go.