2012-06-21 92 views
6

我正在尝试使用CGo来编写Go wrapper,其中包含ENetGo中的条件编译

当我试图在Mac上编译我的包装时,库更旧,并且接口略有不同。只有几个C调用需要改变,99%的代码是相同的。

在Go中处理类似问题的最佳做法是什么?
有没有办法做条件编译或条件导入?

回答

1

Go没有条件编译或条件导入。处理C代码中的类型差异。

Are the [Go] authors opposed to preprocessing?

+0

Go实际上使用文件名后缀进行条件编译,正如andyBallholm的答案所示。 –

+1

Downvoters会讨厌:)。尽管如此,@peterSO对于我的特殊问题有正确的答案。原来Mac的东西是红鲱鱼。真正的问题是库的版本,它只能在头文件中被检测为'#define'。 '_darwin.go'或'_linux.go'只会掩盖问题,直到其中一个用更新后的不兼容更新它们的ENet库。 –

14

分离出特定于平台的东西到一个单独的文件中,例如stuff.go

现在用的版本不同平台取代stuff.go,像stuff_darwin.go(适用于Mac),stuff_windows.go,stuff_linux.go等

如果文件中有这样的一个后缀,go命令将仅在指定的平台上编译它。

+0

这真的很高兴知道。 –

+8

在package go/build的[overview](http://golang.org/pkg/go/build/#overview)中的“Build Constriants”中有记录。 – Sonia

+1

这实际上是一个很棒的解决方案(它符合Go)。 –