Go语言学习笔记(二十四)
一、部署Go语言代码
1 理解目标
Go的优点是可在不同的操作系统体系结构中运行,如果我们编写的程序是为了在本机上运行,直接执行指令go build即可,如何查看本机的环境,可使用go env来查看

我使用的是64位的Windows系统
要指定目标平台进行编译,可使用环境变量GOOS;要指定体系结构可使用环境变量GO。
- 要为32为的Linux系统编译程序,可像下面这样做:
GOOS=linux GOARCH=386 go build example01.go - 要为64位的Windows系统编译程序,可执行如下命令。
GOOS=windows GOARCH=amd64
Go支持很多不同的操作系统和体系结构组合,如下表


Go编程语言的优点之一是,支持大量的操作系统和体系结构组合,因此我们可为这些不同的目标编译Go代码。
2 压缩二进制文件的大小
- 发布Go语言代码很简单:通过编译生成一个二进制文件,其中包含运行程序所需的一切因此我们无须考虑依赖的问题。在诸如Node.js和Ruby等语言中,要将应用程序部署到生产环境必须组合所有的依赖,并发布一系列文件。使用诸如Go等编译型语言时,这个过程要简单的多。使用go build命令即可。
- 相比起其他语言,Go语言得到的二进制文件会更大一些,这是因为它包含执行这个程序所需的一切,其中包括Go语言run-time。
- 使用诸如Ruby和Node.js等语言时,由于run-time安装在服务器上,因此只需发布需要执行的文件。虽然Go语言生成的文件比较大,但有点事不需要任何依赖,就能在编译时指定的系统中运行。
- 通过使用一些编译标志课压缩便已得到的二进制文件的大小。这些标志指定省略符号表、调试信息和DWARF符号表。
GOOS=linux go build -ldflags="-s -w"example01.go
- 通过上面的步骤,我们得到的二进制文件已经很小了,想要继续压缩可使用工具upx进行操作。
3 使用Docker
- Docker是一种在虚拟机中运行应用程序的流行方式,它提供了一种轻量级的方式,可确保无论计算机使用的是哪种操作系统,应用程序都将在相同的环境中运行,Docker使用容器来确保应用程序位于操作系统的沙箱环境中,开销比完整的虚拟机小。
- 当前大多数的云服务提供商都提供了基于容器的服务,可托管和运行Docker容器。这种标准化催生了大量与容器相关的工具,这帮助我们能够轻松的哦对代码进行打包和发布。“开发和运维”这指的是帮助软件小组快速、安全、平稳地发布代码。通过与其他工具结合起来使用,Docker可帮助我们完成这个过程。
- 通过使用Docker,可建立部署管道,这意味着开发人员只需将代码提交到仓库,几分钟之后他们就将自动发布到生产环境。
- Docker和Go的安装和使用
4 下载二进制文件
这里主要说一下如何验证下载的二进制文件是正确的未被窜改的
- 为证明可下载的文件名副其实,有两种常用的方法:一是将文件托管到有证书能证明其身份的https网站,这让证书签发机构能够在用户连接网站时验证其所有者;第二种常用的方法是提供文件的校验和
- 对于任何文件,都可以使用相关的校验和查看器来查看其校验和。Go语言命令如下:

在这里,我失败了,应该是缺少相应的包
5 使用go get
- 我们可以将自己编写的第三方包发布到Github网站,用户只要执行go get 命令即可:
- go get 命令其实等价于 git clone和go install命令的结合
- 所以如果报错的话亦可以先将第三方包从github网站上下载下来,在使用go install命令安装
6 通过包管理器发布代码
虽然通过互联网分享文件是一种简单地额Go程序分享方式,单操作系统大多数都有用于分发代码的官方或者非官方包管理器,这最终让用户能够以一致的方式安装软件,很多包管理器还提供了其他安全功能,如自动比较校验和或要求开发人员对包进行数字签名。下面是一些流行的包管理器及其应用的平台。
7 相关问答
7.1 该如何分享自己编写的软件?通过电子邮件发送、上传到网上工人下载还是使用Docker?
如果要部署Web应用,使用Docker是不错的选择;如果要分享命令行工具,将其上传到网上供人下载或使用go get是不错的选择;如果编写的是固件,则可能需要采用完全不同的分享方式。最重要的是文件的接收者能够验证其完整性。为此,发送或发布校验和是不错的选择,根据要在多大程度上保证文件名副其实,可能还需要考虑对文件进行数字签名
7.2 Go二进制文件真的不需要依赖吗?
不需要。但要注意编译时的环境设置
参考书籍
[1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
本文介绍了Go语言代码的部署方法,包括理解目标平台、压缩二进制文件大小、使用Docker、下载与验证二进制文件、使用goget以及通过包管理器发布代码。强调了Go语言的跨平台特性和二进制文件的独立性。同时,讨论了如何通过Docker简化部署流程,并提到了验证文件完整性的方法。

952

被折叠的 条评论
为什么被折叠?



