如何在不同的操作系统和架构中构建Go应用程序

2023-12-14 07:34:34

在软件开发中,重要的是要考虑要编译二进制文件的操作系统和底层处理器架构。由于在不同的操作系统/体系结构平台上运行二进制文件通常很慢,甚至不可能,因此通常的做法是为许多不同的平台构建最终的二进制文件,以最大限度地吸引程序的受众。然而,当用于开发的平台与要部署程序的平台不同时,这可能会很困难。例如,在过去,在Windows上开发一个程序并将其部署到Linux或macOS机器上,需要为你想要的二进制文件环境设置构建机器。您还需要保持您的工具同步,此外还有其他会增加成本并使协作测试和分发更加困难的考虑因素。

Go通过直接在go build工具以及Go工具链的其余部分中构建对多个平台的支持来解决这个问题。通过使用[环境变量]和[构建标签],您可以控制您的最终二进制文件为哪个操作系统和架构构建,此外,还可以将其组合在一起,以便在不更改代码库的情况下快速切换是否包含平台相关的代码。

在本教程中,您将组合一个示例应用程序,该应用程序将[字符串]连接到一个文件路径中,创建并有选择地包含平台相关的代码片段,并在您自己的系统上为多个操作系统和系统架构构建二进制文件,向您展示如何使用Go编程语言的这种强大功能。

前期准备

要学习本文中的示例,您需要:

  • 通过如何安装Go并设置本地编程环境来设置Go工作空间

“GOOS”和“GOARCH”可用的平台

在展示如何控制构建过程以构建不同平台的二进制文件之前,让我们首先检查一下Go能够构建哪些类型的平台,以及Go如何使用环境变量GOOSGOARCH引用这些平台。

Go工具有一个命令,可以打印出Go可以构建的可能平台的列表。这个列表可能随着每个新的Go版本而变化,因此这里讨论的组合在另一个版本的Go上可能不相同。在撰写本教程时,当前的Go版本是1.13

要找到可能的平台列表,请运行以下命令:

go tool dist list

You will receive an output similar to the following:

Outputaix/ppc64        freebsd/amd64   linux/mipsle   openbsd/386
android/386      freebsd/arm     linux/ppc64    openbsd/amd64
android/amd64    illumos/amd64   linux/ppc64le  openbsd/arm
android/arm      js/wasm         linux/s390x    openbsd/arm64
android/arm64    linux/386       nacl/386       plan9/386
darwin/386       linux/amd64     nacl/amd64p32  plan9/amd64
darwin/amd64     linux/arm       nacl/arm       plan9/arm
darwin/arm       linux/arm64     netbsd/386     solaris/amd64
darwin/arm64     linux/mips      netbsd/amd64   windows/386
dragonfly/amd64  linux/mips64    netbsd/arm     windows/amd64
freebsd/386      linux/mips64le  netbsd/arm64   windows/arm

输出是一组以/分隔的键值对。组合的第一部分,在/之前,是操作系统。在Go中,这些操作系统是环境变量GOOS的可能值,发音为“goose”,它代表Go operating System。第二部分,在/之后,是架构。和之前一样,这些都是环境变量GOARCH的所有可能值。它的发音是“gore-ch”,代表Go架构

让我们以linux/386为例来剖析其中的一个组合,以了解它的含义和工作原理。键值对以GOOS开头,在这个例子中是linux,指的是[linux操作系统]。这里的GOARCH386,代表英特尔80386微处理器。

有很多平台都可以使用go build命令,但大多数情况下,你最终会使用linuxwindowsdarwin作为GOOS的值。这些涵盖了三大操作系统平台:Linux、Windows和macOS, macOS基于Darwin操作系统,因此被称为“Darwin”。然而,Go也可以覆盖不那么主流的平台,如代表谷歌原生客户端nacl

当你运行go build这样的命令时,go使用当前平台的GOOSGOARCH来确定如何构建二进制文件。为了找出你的平台组合,你可以使用go env命令并传递GOOSGOARCH作为参数:

go env GOOS GOARCH

为了测试这个例子,我们在AMD64架构的机器上的macOS上运行这个命令,因此我们将收到以下输出:

Outputdarwin
amd64

这里的命令输出告诉我们,我们的系统有GOOS=darwinGOARCH=amd64

你现在知道了Go中的GOOSGOARCH是什么,以及它们可能的值。接下来,我们将编写一个程序,作为示例,说明如何使用这些环境变量和构建标记来为其他平台构建二进制文件。

使用filepath.Join()编写一个平台相关的程序

在开始为其他平台构建二进制文件之前,让我们构建一个示例程序。Go标准库中的path/filepath包中的Join函数就是一个很好的例子。这个函数接受多个字符串,并返回一个用正确的filepath分隔符连接起来的字符串。

这是一个很好的示例程序,因为程序的操作取决于它运行在哪种操作系统上。在Windows上,路径分隔符是反斜杠\,而基于unix的系统使用正斜杠/

让我们从构建一个使用filepath.Join()的应用程序开始,稍后,您将编写自己的Join()函数实现,该函数将代码定制为特定于平台的二进制文件。

首先,在你的src目录下创建一个以你的应用程序命名的文件夹:

文章来源:https://blog.csdn.net/QIU176161650/article/details/134973056
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。