高级GO构建技术
#发展 #devops #go #backend

目录

I/构建选项

以下是go build命令的一些最常用的选项:

  • -o:指定输出文件名。默认输出文件名是主包的名称,Windows上添加了.exe后缀。
  • -v:详细输出。此选项在编译时打印包装的名称。
  • -work:打印临时工作目录的名称,并在退出时不会删除它。此选项可用于调试。
  • -x:打印命令。此选项打印由go build命令执行的命令。
  • -asmflags:争论传递到go tool asm invocation。
  • -buildmode:要使用的构建模式。默认构建模式为exe。其他可能的值是sharedpieplugin
  • -buildvcs:是否使用版本控制信息盖章二进制文件。默认值为auto

有关go build命令的更多信息,您可以运行以下命令:

go help build

ii/将包括哪个文件

在GO中使用go build命令时,它会在当前目录及其子目录中编译GO源文件以创建可执行的二进制文件。默认情况下,GO仅编译.go文件,而忽略目录中的其他类型的文件。但是,重要的是要注意,go build命令的行为可以受构建标签的影响,构建约束。

go build通常忽略以下文件的类型:

1。具有非.go扩展的文件:

目录中没有.go扩展程序的任何文件都将被忽略。这包括文本文件,配置文件,图像等。

2。子目录中的文件:

go build命令编译当前目录及其子目录中的所有.go文件。其他文件和目录通常会被忽略。

3。一开始有下划线的文件:

通过惯例,GO工具忽略了以下划线_开头的GO源文件。这通常用于临时文件或测试文件。

4。构建约束排除的文件:

GO支持构建约束,使您可以根据目标操作系统或体系结构等条件包括或排除从构建中的特定文件。例如,在为非Windows平台构建时,将忽略具有构建约束的文件。

5。构建标签排除的文件:

构建标签是GO源文件中的特殊注释,可用于根据自定义条件在构建中指定哪些文件。具有与构建上下文不匹配的构建标签的文件将被忽略。

6。设计名为“ TestData”的目录中的文件:名为testdata的目录中的文件被设计忽略了。该目录通常用于包含与测试相关的数据,该数据不应编译。

iii/构建标签

GO的构建标签提供了一种有力的机制,用于在构建过程中包括或排除特定代码。通过使用构建标签,开发人员可以定制其应用程序,以适应不同的构建配置,环境或平台特定要求。在处理互相兼容或为特定操作系统创建二进制文件时,此功能特别有价值。

构建标签是在GO源文件的开头放置的评论,该评论指定了一组条件,该条件应包括该文件中的代码中的代码或从构建中排除。语法为// +构建。例如,考虑仅在为应用程序的某个版本构建时才需要包含特定代码的方案:

main.go

package main

import "fmt"

var version string

func main() {
    fmt.Println(version)
}

pro.go

// +build pro

package main

func init() {
    version = "pro"
}

free.go

// +build free

package main

func init() {
    version = "pro"
}

使用-tags=free构建时,输出将为free,因为包括free.go文件。当您使用-tags=pro构建时,输出将为pro

构建标签语法

您可以以与编程中的任何其他条件性语句相同的方式组合约束,即和,或者,或者,或,或,不是

不是

// +build !cgo

如果未启用CGO,则仅在构建中包括文件。


// +build cgo darwin

如果启用CGO并将鹅设置为Darwin。


// +build darwin,linux

将它们结合在一起,例如

// +build linux,386 darwin,!cgo

结果为(linux和386)或(darwin and(不是CGO))。

iv/构建违法

使用标签构建标志设置自定义构建标签时,Golang会根据环境变量和其他因素自动设置一些标签。这是可用标签的列表

1。 OOS和GORARCH ENVIRECTOR值
您可以在源代码中将约束设置为仅在使用某个鹅或胶管时运行文件。例如

// +build darwin,amd64

package utils

2。 GO版本约束

您还可以将文件包含在构建整个模块中的GO版本中。 EX仅在使用的GO版本为1.12及以上时,您将使用// +build go1.18。如果GO版本为1.18或1.21(撰写本文的最新版本),则该文件包括文件。

参考