Почему cgo is not Go и когда его избегать?

Senior
137 просмотров
AFK Offer AI

cgo ломает cross-compilation, увеличивает время билда, создаёт OS thread на каждый вызов, усложняет деплой (нужны .so/.dll). GC не управляет C памятью — нужно вручную free(). Стек C не growable как Go стек. Вызовы через cgo ~100x медленнее обычных Go вызовов. Избегать когда есть pure Go альтернатива — часто она достаточно быстрая.

Следующий вопрос

Что выведет: type T struct{}; func (T) M() { fmt.Println("T") }; type S struct { T }; func (S) M() { fmt.Println("S") }; var i interface{ M() } = S{}; i.M()?