Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何组织我的go文件以支持跨平台构建并加强一致性?_Go_Projects And Solutions - Fatal编程技术网

我应该如何组织我的go文件以支持跨平台构建并加强一致性?

我应该如何组织我的go文件以支持跨平台构建并加强一致性?,go,projects-and-solutions,Go,Projects And Solutions,我目前正在使用一种方法,其中有一个“基本”文件,用于定义包的类型、接口和基本API。然后,我创建一个\u windows.go和\u linux.go文件,并添加我可以应用该接口的平台特定类型。设置基本上如下所示: 这被认为是最佳实践吗 这是否有助于团队设置,其中一些开发人员专注于linux,而一些开发人员专注于windows,即,如果界面发生更改,两个团队都将通过构建失败得到通知 接口的使用是一个正交的概念。在接口有意义的地方使用接口,但通常更简单,只需在适当的GOOS和GOARCH文件中提供

我目前正在使用一种方法,其中有一个“基本”文件,用于定义包的类型、接口和基本API。然后,我创建一个
\u windows.go
\u linux.go
文件,并添加我可以应用该接口的平台特定类型。设置基本上如下所示:

  • 这被认为是最佳实践吗
  • 这是否有助于团队设置,其中一些开发人员专注于linux,而一些开发人员专注于windows,即,如果界面发生更改,两个团队都将通过构建失败得到通知
    接口的使用是一个正交的概念。在接口有意义的地方使用接口,但通常更简单,只需在适当的GOOS和GOARCH文件中提供同名的实现

    std库中的某些地方也使用了使用公共构造函数名的方法(来自您的示例),将全局变量名分配给函数的方法(在概念上与前一种方法类似)


    因为Go是静态类型的,并且不能重新声明全局标识符,所以构建系统总是会遇到问题;这只是对所有适用系统进行测试的问题,以确保没有操作系统或ARCH具有过时的实现。

    您所说的“预编译构建指令”是什么意思?(顺便说一句,如果您需要更多关于如何处理多个平台的确认,您可以查看
    os
    syscall
    net
    包)*构建约束,我已经更新了问题这些是构建约束。它们的工作原理完全相同。我的理解是,构建工具甚至不会使用下划线方法读取文件。从这个意义上说,是的,构建工具将“读取”构建约束行,然后跳过该文件,但结果是一样的。谢谢。接口开始让我问“为什么我不在每个文件中都使用相同的方法?”只是为了确保我得到了它,在查看网络库时,有这个文件。这只是为了在windows上构建时实现不会中断,而且还因为没有_windows文件,对吗?@scottm:是的,_stub.go没有什么特别之处,它只有一个
    !linux
    build约束为所有其他平台提供空实现。如果有一天将
    sysICMPFilter
    添加到
    \u windows.go
    文件中,他们可以添加
    !在存根文件约束中使用windows
    ,以使生成再次工作。