Вопрос по go, cgo – Условная компиляция в Go

6

Я пытаюсь написать Goобертка с помощьюОЦП заENet.

Когда я пытался скомпилировать свою оболочку на Mac, библиотека была старше и имела немного другой интерфейс. 99% кода - это то же самое, только несколько вызовов C нужно изменить.

Какова лучшая практика для решения такой проблемы в Go?
Есть ли способ сделать условную компиляцию или условный импорт?

Ваш Ответ

2   ответа
1

Go не имеет условной компиляции или условного импорта. Обработайте различия типов в C-коде.

Авторы [Go] выступают против предварительной обработки?

Downvoters буду ненавидеть :). Если серьезно, у @peterSO есть правильный ответ для моей конкретной проблемы. Оказывается, Mac это красная селедка. Настоящая проблема связана с версиями библиотеки, которые могут быть обнаружены только как#define в заголовочных файлах._darwin.go или же_linux.go будет только маскировать проблему, пока один из них не обновит свою библиотеку ENet с обратным несовместимым изменением. deft_code
На самом деле Go имеет условную компиляцию с использованием суффиксов имен файлов, что демонстрирует ответ andyBallholm.
14

Выделите материал для конкретной платформы в отдельный файл, например, stuff.go

Теперь замените stuff.go версиями для разных платформ, такими как stuff_darwin.go (для Mac), stuff_windows.go, stuff_linux.go и т. Д.

Если файл имеет такой суффикс, команда go скомпилирует его только на указанной платформе.

Это действительно приятно знать. deft_code
Отличная информация и абсолютно правильный ответ для несовместимости ОС. Однако корень моей проблемы - в разных версиях библиотек, поэтому я решил ответить непосредственно на этот вопрос. deft_code
Документировано в разделе «Построить константы». вoverview пакета идти / строить.
Это на самом деле блестящее решение (оно подходит для Go).

Похожие вопросы