作为 Go 开发人员,您可能已经使用了两个常用的命令,go rungo build,它们用于构建、测试和运行您的 Go 应用程序。这两个命令都有特定的用途并执行不同的功能。

在这篇博文中,我们将更深入地探讨这两个命令之间的差异,并帮助您为您的项目选择合适的命令。

什么是 Go 构建工具?

Go build 是一个用于编译 Go 程序的命令行工具。它编译一个 Go 源代码文件并创建一个可执行的二进制文件。

Go 构建工具会自动确定 Go 包的依赖关系并编译它们。Go 构建工具可用于构建单个包或整个项目。

Go Build 的特点

Go Build 工具的一些显着功能是:

  1. 跨平台编译:Go Build 工具可以针对不同的操作系统和架构编译 Go 程序。
  2. 增量编译:Go Build 工具仅重新编译已更改的文件,从而使 Build 过程更快。
  3. 自动依赖管理:Go Build 工具自动检测和管理 Go 包的依赖关系。
  4. 自定义:Go Build 工具提供了各种选项来自定义构建过程,例如指定输出目录和设置构建标记。

Go Build 用法

Go Build 命令的基本语法是:

go build [build flags] [packages]

“packages” 参数是要构建的 Go 软件包的路径。如果未指定包,Go 将尝试在当前目录中构建包。

生成标志是可选的,可用于自定义生成过程。一些常用的构建标志是:

  • go build -o:指定输出文件名。默认情况下,Go build 会生成一个与当前目录中的包同名的可执行文件。
  • Go build -a:强制重建所有软件包,包括那些已经是最新的软件包。
  • Go build -v:启用详细输出,并在编译包时显示包的名称。
  • go build -x:在执行命令时打印命令。
  • Go Build -race:在构建过程中启用数据争用检测。
  • Go build -mod:指定模块下载模式。
  • Go build -tags:在构建过程中包含或排除特定的代码片段。

在 Golang 中构建包

go build github.com/example/mypackage

此命令构建位于“github.com/example”存储库中的“mypackage”包。

Go build -o 标志

“-o”标志指定输出文件名。默认情况下,Go build 会生成一个与当前目录中的包同名的可执行文件。

go build -o myapp github.com/example/myapp

“go build -o”命令构建位于“github.com/example”存储库中的“myapp”包,并在当前目录中创建一个名为“myapp”的可执行二进制文件。

为不同的操作系统构建

GOOS=windows go build github.com/example/myapp

此命令生成位于 Windows 操作系统的“github.com/example”存储库中的“myapp”包。

在 Go 中构建特定文件

go build github.com/example/mypackage/myfile.go

此命令构建位于“github.com/example”存储库中“mypackage”包中的“myfile.go”文件。

Go build -tags 标志

go build “-tags” 标志可用于在构建过程中包含或排除特定的代码片段。

go build -tags production github.com/example/myapp

此命令使用构建标记“生产”构建位于“github.com/example”存储库中的“myapp”包。

Go build -gcflags

go build “-gcflags” 选项指定要传递给 Go 编译器的编译器标志。

“-N”标志用于禁用优化,“-l”标志用于禁用内联。

go build -gcflags "-N -l" github.com/example/myapp

针对特定架构进行构建

“GOARCH”环境变量指定目标架构。

GOARCH=arm go build github.com/example/myapp

此命令生成位于 ARM 体系结构的“github.com/example”存储库中的“myapp”包。

Go build -v 标志

启用详细输出是使用“-v”标志完成的。

go build -v github.com/example/myapp

Go 命令从“github.com/example”存储库编译“myapp”包,并在编译包时显示包名称。

Go build -race 标志

go 构建“-race”标志在构建过程中启用数据竞用检测。

go build -race github.com/example/myapp

此命令使用争用检测构建位于“github.com/example”存储库中的“myapp”包。

Go build -mod 标志

go build “-mod” 选项指定模块下载模式。

go build -mod=vendor github.com/example/myapp

此命令使用供应商目录作为模块缓存构建位于“github.com/example”存储库中的“myapp”包。

运行 Go 构建的可执行文件

使用 Go 构建工具构建 Go 程序后,您可以在计算机上运行生成的可执行文件。运行可执行文件允许您测试和验证程序的功能。

要运行 Go 构建可执行文件,请使用命令行导航到可执行文件所在的目录。然后,您可以通过键入文件名称并按 Enter 来执行该文件。

如何在 Windows 机器上运行名为“myapp.exe”的 Go 构建可执行文件的示例:

$ cd C:\path\to\executable\directory
    $ myapp.exe

如果需要在不同的操作系统(如 Linux 或 MacOS)上运行可执行文件,则必须使用兼容的环境或 Wine 等工具来模拟目标平台。

什么是 Go run 工具?

Go run 工具是一个内置的命令行实用程序,可让您快速轻松地编译和运行 Go 代码。它是 Go 编程语言发行版的一部分,可以从命令行访问。该工具对于不需要完整构建系统或复杂配置的小型程序特别有用。

Go Run 的特点

Go run 工具对于运行不需要完整构建系统或复杂配置的小型程序特别有用。

Go 运行工具的一些最常见功能包括:

  1. 编译 Go 代码

Go run 工具主要用于编译和执行 Go 代码。当您使用 Go 运行工具运行 Go 文件时,它将自动编译代码并为您执行。这为您省去了手动编译和运行代码的麻烦。

  1. 运行单元测试

Go run 工具还允许您为 Go 代码运行单元测试。当您开发大型应用程序并希望测试代码的各个组件时,这特别有用。若要使用 Go 运行工具运行单元测试,可以使用“go test”命令,后跟要测试的文件的名称。

  1. 跨平台编译

Go run 工具还允许您为不同的平台编译代码。当您开发跨平台应用程序并需要确保您的代码在不同的操作系统上运行时,这特别有用。要为不同的平台编译代码,您可以使用“GOOS”和“GOARCH”环境变量。

Go run 用法

使用 Go 运行工具的语法很简单。您可以使用“go run”命令,后跟要运行的文件的名称。

例如:

go run main.go

在这里,我们正在运行一个名为“main.go”的程序。

Go run 标志

Go run 工具还允许您指定可以修改其行为的各种参数和选项。一些最常见的参数是:

  • -a:强制重建已更新的软件包。
  • -n:打印将执行但不运行的命令。
  • -p n:设置在构建过程中要使用的 CPU 数。
  • -race:启用数据竞争检测。
  • -v:在编译包时打印包的名称。

Go run 强制重建

go run “-a” 标志用于强制重建已经是最新的软件包。

当您怀疑 Go 没有正确编译代码时,或者当您希望在更改源代码后确保所有包都是最新的时,可以使用该标志。

go run -a main.go

运行打印命令

go run “-n” 标志用于打印将要执行的命令,但不实际运行它们。

当您想查看 Go run 会做什么,但又不想执行命令时,这很有用。

go run -n main.go

使用多个 CPU 运行

go run “-p” 标志用于设置在构建过程中要使用的 CPU 数量。

当您想要通过使用多个 CPU 来加快生成过程时,这很有用。

go run -p 4 main.go

在此示例中,我们将 CPU 数设置为 4。这将在构建过程中使用四个 CPU。

go run “-race” 标志

go run “-race” 标志用于启用数据竞用检测。当您想要检测代码中的争用条件时,这很有用。

go run -race main.go

在此示例中,我们为文件 main.go 启用数据竞争检测。

运行打印包名称

go run “-v” 标志用于在编译包时打印包的名称。当您想要查看正在编译哪些包时,这很有用。

go run -v main.go

在此示例中,我们将打印为文件 main.go 编译的包的名称。

看看更多 Go 命令行工具。

Go Run 和 Go Build 之间的差异

现在我们已经了解了 Go run 和 Go build 的基本功能,让我们来看看两者之间的一些关键区别。

  1. 编译和执行

Go run 执行编译和执行代码的单步过程,而 Go build 将编译和执行分为两个不同的步骤。Go run 使您能够快速测试代码,而无需创建可执行文件。相比之下,Go build 会生成一个可执行文件,该文件可以在任何平台上运行,而无需安装 Go。

  1. 性能

由于 Go run 在单个步骤中编译和执行代码,因此执行时间可能比 Go 构建更长。这是因为 Go build 编译代码并对其进行优化以获得更好的性能。但是,对于小程序或代码片段,性能差异可能并不明显。

  1. 调试

Go run 对于测试和调试小程序或代码片段很有用。但是,使用 Go run 调试大型项目可能不切实际。相反,开发人员可以使用 Go build,它创建一个可执行文件,可用于主动调试和分析应用程序。

  1. 配置

Go run 不提供任何用于配置构建过程的选项。另一方面,Go build 提供了几个用于配置构建过程的选项,例如指定输出文件名、设置目标体系结构和指定构建标志。

运行与构建 – 为您的项目选择正确的命令

现在,您已经了解了 Go run 和 Go build 之间的区别,您可以根据自己的特定需求为您的项目选择正确的命令。

在某些情况下,您可以选择一个命令而不是另一个命令:

  1. 测试小程序或代码片段

如果要快速测试小程序或代码片段,可以使用 go run 命令。这将在一个步骤中编译和运行程序,而无需创建可执行文件。

  1. 构建用于部署的可执行文件

可以使用 go build 命令生成可跨不同平台部署或分发的可执行文件。此命令将创建一个可执行文件,任何人都可以在任何平台上运行该文件,而无需安装 Go。

  1. 调试和分析

如果要调试或分析应用程序,可以使用 go build 命令创建可执行文件。然后,此文件可用于调试和分析目的。

  1. 配置

如果需要配置生成过程,可以使用 go 生成命令。此命令提供了多个用于配置生成过程的选项,例如指定输出文件名、设置目标体系结构和指定生成标志。

总结

总之,Go Run 和 Go Build 是功能强大的工具,可以轻松构建、测试和运行 Go 程序。这些工具为开发人员提供了一种简化且高效的方式来开发他们的 Go 应用程序,并且各种标志和参数为自定义构建过程提供了一系列选项和灵活性。

无论是构建小型脚本还是大型应用程序,Go Run and Go Build 都可以轻松编译和运行代码。通过使用这些工具,您可以专注于编写出色的代码,而不必担心构建过程。借助交叉编译的额外优势,您甚至可以针对其他平台和体系结构进行构建。

参考