如何构建和安装 Go 程序

介绍

到目前为止,我们[如何在 Go 系列中编码 (https://www.digitalocean.com/community/tutorial_series/how-to-code-in-go]] 中,您已经使用命令 [`去跑' (https://andsky.com/tech/tutorials/how-to-write-your-first-program-in-go# step-2-%E2%80%94-running-a-go-program) 自动编译您的源代码并运行产生的可执行文件 。 虽然此命令对于在命令行上测试您的代码很有用,但分配或部署您的应用程序需要您将您的代码构建为可共享的_binary可执行文件_,或者包含机器字节代码的单一文件,可以运行您的应用程序. 要做到这一点, 您可以使用 Go 工具链来 building and install 您的程序 .

Go中,将源代码翻译为二进制可执行文件的过程称为_building_. 此可执行文件建成后, 不仅会包含您的应用程序, 还会包含执行目标平台二进制所需的全部支持代码 。 这意味着Go 二进制不需要Go工具等系统依赖性来运行于新系统. 将这些可执行文件放在您自己的系统中的可执行文件路径中,将允许您从您的系统中的任何地方运行程序 。 这与将程序拖入您的系统相同 .

在本教程中,您将使用Go工具链来运行,构建和安装样本Hello, World!程序,允许您有效地使用,分发和部署未来的应用程序。

前提条件

要遵循本文中的例子,您将需要:

步骤 1 - 设置和运行Go Binary

首先,创建一个应用程序,作为示例来演示Go工具链。 要做到这一点,你将使用从教程中使用的经典Hello, World!程序(How To Write Your First Program in Go)(LINK0)。

在您的src目录中创建一个名为greeter的目录:

1mkdir greeter

接下来,进入新创建的目录,并在您选择的文本编辑器中创建main.go文件:

1cd greeter
2nano main.go

打开文件后,添加以下内容:

1[label src/greeter/main.go]
2package main
3
4import "fmt"
5
6func main() {
7    fmt.Println("Hello, World!")
8}

运行时,该程序将打印到控制台的Hello, World!短语,然后该程序将成功退出。

保存和退出文件。

要测试该程序,请使用运行命令,就像您在以前的教程中所做的:

1go run main.go

您将收到以下输出:

1[secondary_label Output]
2Hello, World!

正如前面提到的,该命令将您的源文件构建为可执行的二进制文件,然后运行编译的程序。然而,本教程旨在以一种方式构建二进制文件,以便您可以随意共享和分发它。

步骤 2 — 创建一个Go模块来构建一个Go二进制

Go 程序和库是围绕一个模块的核心概念构建的. 一个模块包含有关程序使用的库和使用这些库的版本的信息。

要告诉Go这是一个Go模块,你需要使用go mod命令创建一个Go模块(https://andsky.com/tech/tutorials/how-to-use-go-modules):

1go mod init greeter

这将创建 go.mod 文件,其中将包含模块的名称以及使用的 Go 版本。

1[secondary_label Output]
2go: creating new go.mod: module greeter
3go: to add module requirements and sums:
4    go mod tidy

Go 将提示您运行Go mod 顺序,以便在未来更改此模块的要求。

步骤 3 – 用去构建构建 Go 二进制

使用Go build,您可以为我们的样本Go应用程序生成可执行的二进制,允许您在您想要的地方分发和部署该程序。

尝试使用main.go。在您的greeter目录中,运行以下命令:

1go build

如果你不提供这个命令的论点,‘go build’会自动在当前目录中编译‘main.go’程序.该命令将包括你的所有‘*.go’文件在目录中。

在这种情况下,你将你的greater应用程序构建成一个可执行的文件,该文件被添加到你的当前目录中。

1ls

如果您正在运行 macOS 或 Linux,您会发现一个新的可执行文件,该文件是根据您构建程序的目录命名的:

1[secondary_label Output]
2greeter main.go go.mod

<$>[注] 注: 在 Windows 中,您的可执行文件将是 greeter.exe

默认情况下,go build 会为当前的 平台和架构生成一个可执行的系统。例如,如果构建在 linux/386 系统上,该可执行的系统将与任何其他 linux/386 系统兼容,即使没有安装 Go。

现在,你已经创建了可执行的,运行它,以确保二进制是正确构建的. 在 macOS 或 Linux 上,运行以下命令:

1./greeter

在 Windows 上,运行:

1greeter.exe

二进制的输出将匹配你运行该程序时的输出:

1[secondary_label Output]
2Hello, World!

现在你已经创建了一个单一的可执行的二进制,它不仅包含你的程序,而且还包含运行该二进制所需的所有系统代码. 你现在可以将这个程序分发到新的系统或部署到服务器上,知道该文件将始终运行相同的程序。

在下一节中,本教程将解释二进制是如何命名的,以及您如何更改它,以便您可以更好地控制程序的构建过程。

步骤4:更改二进制名称

现在你知道如何生成一个可执行的,下一步是确定Go如何选择二进制的名称,并为你的项目定制这个名称。

当您运行go build,默认情况下,Go 会自动决定生成的可执行的名称。它通过使用您之前创建的模块来执行此操作。当运行go mod init greeter命令时,它创建了名为greeter的模块,这就是为什么生成的二进制被命名为greeter的原因。

让我们仔细看看模块方法,如果你在你的项目中有一个go.mod文件,其中包含一个模块声明,如下:

1[label go.mod]
2module github.com/sammy/shark

然后生成的可执行的默认名称将是鲨鱼

在需要特定命名惯例的更复杂的程序中,这些默认值并不总是命名您的二进制的最佳选择。

要测试这一点,请更改您在上一节中创建的可执行的名称为你好,并将其放置在名为bin的子文件夹中。

运行以下go build命令与-o旗帜:

1go build -o bin/hello

「-o」旗使 Go 匹配命令的输出到您选择的任何参数. 在这种情况下,结果是在名为「bin」的子文件夹中的一个名为「hello」的新执行。

要测试新的可执行,切换到新目录并运行二进制:

1cd bin
2./hello

您将获得以下输出:

1[secondary_label Output]
2Hello, World!

您现在可以定制您的可执行的名称,以满足您的项目的需求,完成我们的调查如何在Go中构建二进制文件,但在Go build中,您仍然限制在当前目录中运行您的二进制文件。

步骤 5 — 安装 Go 程序与Go 安装

到目前为止,在本文中,我们已经讨论了如何从我们的.go 源文件中生成可执行的二进制文件. 这些可执行文件有助于分发,部署和测试,但它们尚不能从其源目录之外执行。

要了解这意味着什么,您将使用去安装命令来安装您的样本应用程序。

go install命令几乎与go build相同,但而不是在当前目录中留下可执行的文件,或由-o旗指定的目录,它将可执行的文件放在$GOPATH/bin目录中。

要找到您的$GOPATH目录所在位置,请运行以下命令:

1go env GOPATH

您接收的输出将有所不同,但默认情况下是您的$HOME目录中的Go目录:

1[secondary_label Output]
2$HOME/go

由于Go install会将生成的执行程序放入名为bin$GOPATH子目录中,因此该目录必须添加到$PATH环境变量中。

设置了$GOPATH/bin目录,然后返回您的问候目录:

1cd ..

现在运行安装命令:

1go install

这将构建你的二进制,并将其放置在$GOPATH/bin

1ls $GOPATH/bin

这将列出$GOPATH/bin的内容:

1[secondary_label Output]
2greeter

<$>[注] ** 注意:** go install 命令不支持 -o 旗帜,因此它将使用先前描述的默认名称来命名可执行的。

有了二进制安装,测试一下程序是否会从源目录之外运行。

1cd $HOME

使用以下操作来运行该程序:

1greeter

这将产生如下:

1[secondary_label Output]
2Hello, World!

现在你可以把你写的程序,并将它们安装到你的系统中,允许你从任何地方使用它们,只要你需要它们。

结论

在本教程中,您展示了Go工具链如何使从源代码创建可执行的二进制文件变得容易。这些二进制文件可以分发到其他系统上运行,即使没有Go工具和环境的系统。您还使用go install来自动构建和安装我们的程序作为系统的$PATH中的可执行文件。有了go buildgo install,您现在可以随意共享和使用您的应用程序。

现在你已经知道go build的基本知识,你可以探索如何使用Customizing Go Binaries with Build Tags教程(https://andsky.com/tech/tutorials/customizing-go-binaries-with-build-tags)创建模块化源代码,或者如何使用Building Go Applications for Different Operating Systems and Architectures(https://andsky.com/tech/tutorials/building-go-applications-for-different-operating-systems-and-architectures)为不同的平台创建代码。

Published At
Categories with 技术
Tagged with
comments powered by Disqus