我应该如何组织我的 go 文件以支持跨平台构建和强制一致性?
How should I organize my go files to support cross platform builds and enforce consistency?
我目前正在使用一种方法,其中我有一个 "base" 文件,该文件定义了程序包的类型、接口和基本 API。然后我创建一个 _windows.go
和 _linux.go
文件并添加我可以应用接口的平台特定类型。设置基本上是这样的:http://play.golang.org/p/2DJxTuSAIh.
- 这被认为是最佳做法吗?
- 这是否有助于某些开发人员 linux 专注而另一些 windows 专注的团队设置,即如果界面发生变化,两个团队都将通过构建失败得到通知?
接口的使用是一个正交的概念。在接口有意义的地方使用接口,但它通常更简单,只需在正确的 GOOS 和 GOARCH 文件中提供同名的实现。
使用通用构造函数名称(来自您的示例)的方法也用于标准库中的某些地方,将全局变量名称分配给函数的方法也是如此(这在概念上类似于前者方法)。
因为 Go 是静态类型的,你不能重新声明全局标识符,构建系统总是会发现问题;这只是测试所有适用系统的问题,以确保没有 OS 或 ARCH 有过时的实现。
我目前正在使用一种方法,其中我有一个 "base" 文件,该文件定义了程序包的类型、接口和基本 API。然后我创建一个 _windows.go
和 _linux.go
文件并添加我可以应用接口的平台特定类型。设置基本上是这样的:http://play.golang.org/p/2DJxTuSAIh.
- 这被认为是最佳做法吗?
- 这是否有助于某些开发人员 linux 专注而另一些 windows 专注的团队设置,即如果界面发生变化,两个团队都将通过构建失败得到通知?
接口的使用是一个正交的概念。在接口有意义的地方使用接口,但它通常更简单,只需在正确的 GOOS 和 GOARCH 文件中提供同名的实现。
使用通用构造函数名称(来自您的示例)的方法也用于标准库中的某些地方,将全局变量名称分配给函数的方法也是如此(这在概念上类似于前者方法)。
因为 Go 是静态类型的,你不能重新声明全局标识符,构建系统总是会发现问题;这只是测试所有适用系统的问题,以确保没有 OS 或 ARCH 有过时的实现。