如何在不同的操作系统和架构中构建Go应用程序
在软件开发中,重要的是要考虑要编译二进制文件的操作系统和底层处理器架构。由于在不同的操作系统/体系结构平台上运行二进制文件通常很慢,甚至不可能,因此通常的做法是为许多不同的平台构建最终的二进制文件,以最大限度地吸引程序的受众。然而,当用于开发的平台与要部署程序的平台不同时,这可能会很困难。例如,在过去,在Windows上开发一个程序并将其部署到Linux或macOS机器上,需要为你想要的二进制文件环境设置构建机器。您还需要保持您的工具同步,此外还有其他会增加成本并使协作测试和分发更加困难的考虑因素。
Go通过直接在go build
工具以及Go工具链的其余部分中构建对多个平台的支持来解决这个问题。通过使用[环境变量]和[构建标签],您可以控制您的最终二进制文件为哪个操作系统和架构构建,此外,还可以将其组合在一起,以便在不更改代码库的情况下快速切换是否包含平台相关的代码。
在本教程中,您将组合一个示例应用程序,该应用程序将[字符串]连接到一个文件路径中,创建并有选择地包含平台相关的代码片段,并在您自己的系统上为多个操作系统和系统架构构建二进制文件,向您展示如何使用Go编程语言的这种强大功能。
前期准备
要学习本文中的示例,您需要:
- 通过如何安装Go并设置本地编程环境来设置Go工作空间
“GOOS”和“GOARCH”可用的平台
在展示如何控制构建过程以构建不同平台的二进制文件之前,让我们首先检查一下Go能够构建哪些类型的平台,以及Go如何使用环境变量GOOS
和GOARCH
引用这些平台。
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操作系统]。这里的GOARCH
是386
,代表英特尔80386微处理器。
有很多平台都可以使用go build
命令,但大多数情况下,你最终会使用linux
、windows
或darwin
作为GOOS
的值。这些涵盖了三大操作系统平台:Linux、Windows和macOS, macOS基于Darwin操作系统,因此被称为“Darwin”。然而,Go也可以覆盖不那么主流的平台,如代表谷歌原生客户端的nacl
。
当你运行go build
这样的命令时,go使用当前平台的GOOS
和GOARCH
来确定如何构建二进制文件。为了找出你的平台组合,你可以使用go env
命令并传递GOOS
和GOARCH
作为参数:
go env GOOS GOARCH
为了测试这个例子,我们在AMD64架构的机器上的macOS上运行这个命令,因此我们将收到以下输出:
Outputdarwin
amd64
这里的命令输出告诉我们,我们的系统有GOOS=darwin
和GOARCH=amd64
。
你现在知道了Go中的GOOS
和GOARCH
是什么,以及它们可能的值。接下来,我们将编写一个程序,作为示例,说明如何使用这些环境变量和构建标记来为其他平台构建二进制文件。
使用filepath.Join()
编写一个平台相关的程序
在开始为其他平台构建二进制文件之前,让我们构建一个示例程序。Go标准库中的path/filepath
包中的Join
函数就是一个很好的例子。这个函数接受多个字符串,并返回一个用正确的filepath分隔符连接起来的字符串。
这是一个很好的示例程序,因为程序的操作取决于它运行在哪种操作系统上。在Windows上,路径分隔符是反斜杠\
,而基于unix的系统使用正斜杠/
。
让我们从构建一个使用filepath.Join()
的应用程序开始,稍后,您将编写自己的Join()
函数实现,该函数将代码定制为特定于平台的二进制文件。
首先,在你的src
目录下创建一个以你的应用程序命名的文件夹:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!