【发布时间】:2012-06-23 23:24:00
【问题描述】:
我正在尝试使用 CGo 为 ENet 编写 Go wrapper。
当我尝试在 Mac 上编译我的包装器时,库较旧并且界面略有不同。 99% 的代码是相同的,只是需要更改几个 C 调用。
在 Go 中处理此类问题的最佳做法是什么?
有没有办法进行条件编译或条件导入?
【问题讨论】:
我正在尝试使用 CGo 为 ENet 编写 Go wrapper。
当我尝试在 Mac 上编译我的包装器时,库较旧并且界面略有不同。 99% 的代码是相同的,只是需要更改几个 C 调用。
在 Go 中处理此类问题的最佳做法是什么?
有没有办法进行条件编译或条件导入?
【问题讨论】:
将特定于平台的内容分离到一个单独的文件中,例如stuff.go
现在将 stuff.go 替换为不同平台的版本,例如 stuff_darwin.go(适用于 Mac)、stuff_windows.go、stuff_linux.go 等。
如果文件有这样的后缀,go 命令只会在指定的平台上编译它。
【讨论】:
Go 没有条件编译或条件导入。处理 C 代码中的类型差异。
【讨论】:
#define。 _darwin.go 或 _linux.go 只会掩盖问题,直到其中一个使用向后不兼容的更改更新其 ENet 库。