我可以根据要构建的操作系统导入Golang软件包吗?

克里斯蒂安·格拉波夫斯基(Christian Grabowski)

假设我有一个go项目,该项目基于哪个OS,在某些情况下取决于哪个发行版,我想使用一个Systemd客户端程序包,Upstart客户端程序包,sysv客户端程序包和启动的客户端程序包。是否可以有选择地导入每个软件包,以便仅导入要为其构建的每个OS /发行版所需的软件包?还是我必须为每个操作系统/发行版导入每个软件包?

彼得

包构建

建立约束

构建约束,也称为构建标签,是开始的行注释

// +build

列出了将文件包含在软件包中的条件。约束可能会出现在任何类型的源文件中(不仅是Go),但它们必须出现在文件顶部附近,并且只能出现空白行和其他行注释。这些规则意味着在Go文件中,构建约束必须出现在package子句之前。

为了将构建约束与软件包文档区分开来,必须在一系列构建约束后跟一个空行。

将构建约束评估为以空格分隔的选项的OR。每个选项的求值均以其逗号分隔的术语的AND表示;并且每个术语都是字母数字单词,或者在其前面加!的取反。也就是说,构建约束:

// +build linux,386 darwin,!cgo

对应于布尔公式:

(linux AND 386) OR (darwin AND (NOT cgo))

一个文件可能有多个构建约束。总体约束是各个约束的与。也就是说,构建约束:

// +build linux darwin
// +build 386

对应于布尔公式:

(linux OR darwin) AND 386

在特定的构建过程中,满足以下条件:

- the target operating system, as spelled by runtime.GOOS
- the target architecture, as spelled by runtime.GOARCH
- the compiler being used, either "gc" or "gccgo"
- "cgo", if ctxt.CgoEnabled is true
- "go1.1", from Go version 1.1 onward
- "go1.2", from Go version 1.2 onward
- "go1.3", from Go version 1.3 onward
- "go1.4", from Go version 1.4 onward
- "go1.5", from Go version 1.5 onward
- "go1.6", from Go version 1.6 onward
- any additional words listed in ctxt.BuildTags

如果在删除扩展名和可能的_test后缀后,文件名与以下任何一种模式匹配:

*_GOOS
*_GOARCH
*_GOOS_GOARCH

(示例:source_windows_amd64.go),其中GOOS和GOARCH分别表示任何已知的操作系统和体系结构值,然后该文件被视为具有需要这些术语的隐式构建约束(除了文件中的任何显式约束)。

要避免考虑将文件用于构建:

// +build ignore

(其他任何不满意的词也可以使用,但是“忽略”是常规的。)

要仅在使用cgo且仅在Linux和OS X上构建文件:

// +build linux,cgo darwin,cgo

这样的文件通常与实现其他系统默认功能的另一个文件配对,在这种情况下,它将带有约束:

// +build !linux,!darwin !cgo

命名文件dns_windows.go将导致仅在构建Windows软件包时才包含该文件;同样,仅当为32位x86构建软件包时,才会包括math_386.s。

使用GOOS = android除了匹配android标签和文件外,还像GOOS = linux一样匹配构建标签和文件。

使用构建约束。

将单个程序包与多个文件一起使用。每个文件专门用于特定的OS,体系结构等组合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以根据操作系统使用不同的软件包来制作python软件包吗?

来自分类Dev

如果我在香草Debian操作系统上安装“ ubuntu-desktop”软件包,我将获得与直接安装Ubuntu相同的操作系统吗?

来自分类Dev

如何根据操作系统告诉Pipenv忽略Pipfile中的软件包

来自分类Dev

我可以使用Debian软件包构建环境来构建Ubuntu软件包吗?

来自分类Dev

Scala IDE可以建议要自动导入的软件包吗?

来自分类Dev

Scala IDE可以建议要自动导入的软件包吗?

来自分类Dev

是否可以配置.deb软件包,使其仅安装在32位操作系统上,而不安装在64位操作系统上?

来自分类Dev

来自操作系统或自定义软件包管理器的软件包

来自分类Dev

我希望Python首先检查要导入的软件包

来自分类Dev

我可以用X64操作系统为ARM构建gcc吗?

来自分类Dev

Golang,从Github导入软件包要求我记住Github URL吗?

来自分类Dev

我的系统可以运行64位操作系统吗?

来自分类Dev

我的系统可以运行64位操作系统吗?

来自分类Dev

我可以在排除某个类的同时导入软件包吗?

来自分类Dev

我可以在不包括某类的情况下导入软件包吗?

来自分类Dev

在RStudio中,我可以快速测试,构建和安装当前软件包吗?

来自分类Dev

我可以锁定我的 android 应用程序而不让用户与任何操作系统设置或软件按钮进行交互吗?

来自分类Dev

我可以从Steam上下载不同的操作系统吗?

来自分类Dev

在其他操作系统上手动下载软件包

来自分类Dev

在其他操作系统上手动下载软件包

来自分类Dev

如何将软件包安装到Debian Linux操作系统?

来自分类Dev

安装新操作系统后在R上安装任何软件包时出错

来自分类Dev

安装软件包后在基于 debian 的操作系统中下载的依赖项信息

来自分类Dev

Debian构建系统的基本软件包

来自分类Dev

我可以在Java中设置默认软件包吗?

来自分类Dev

我可以使Intellij编译单个软件包吗?

来自分类Dev

我可以安装Snap软件包的多个副本吗?

来自分类Dev

我可以使用RPostgreSQL软件包将PostGIS栅格数据类型导入R吗?

来自分类Dev

我可以构建一个拥有未安装文件的rpm软件包吗?

Related 相关文章

  1. 1

    我可以根据操作系统使用不同的软件包来制作python软件包吗?

  2. 2

    如果我在香草Debian操作系统上安装“ ubuntu-desktop”软件包,我将获得与直接安装Ubuntu相同的操作系统吗?

  3. 3

    如何根据操作系统告诉Pipenv忽略Pipfile中的软件包

  4. 4

    我可以使用Debian软件包构建环境来构建Ubuntu软件包吗?

  5. 5

    Scala IDE可以建议要自动导入的软件包吗?

  6. 6

    Scala IDE可以建议要自动导入的软件包吗?

  7. 7

    是否可以配置.deb软件包,使其仅安装在32位操作系统上,而不安装在64位操作系统上?

  8. 8

    来自操作系统或自定义软件包管理器的软件包

  9. 9

    我希望Python首先检查要导入的软件包

  10. 10

    我可以用X64操作系统为ARM构建gcc吗?

  11. 11

    Golang,从Github导入软件包要求我记住Github URL吗?

  12. 12

    我的系统可以运行64位操作系统吗?

  13. 13

    我的系统可以运行64位操作系统吗?

  14. 14

    我可以在排除某个类的同时导入软件包吗?

  15. 15

    我可以在不包括某类的情况下导入软件包吗?

  16. 16

    在RStudio中,我可以快速测试,构建和安装当前软件包吗?

  17. 17

    我可以锁定我的 android 应用程序而不让用户与任何操作系统设置或软件按钮进行交互吗?

  18. 18

    我可以从Steam上下载不同的操作系统吗?

  19. 19

    在其他操作系统上手动下载软件包

  20. 20

    在其他操作系统上手动下载软件包

  21. 21

    如何将软件包安装到Debian Linux操作系统?

  22. 22

    安装新操作系统后在R上安装任何软件包时出错

  23. 23

    安装软件包后在基于 debian 的操作系统中下载的依赖项信息

  24. 24

    Debian构建系统的基本软件包

  25. 25

    我可以在Java中设置默认软件包吗?

  26. 26

    我可以使Intellij编译单个软件包吗?

  27. 27

    我可以安装Snap软件包的多个副本吗?

  28. 28

    我可以使用RPostgreSQL软件包将PostGIS栅格数据类型导入R吗?

  29. 29

    我可以构建一个拥有未安装文件的rpm软件包吗?

热门标签

归档