Go语言学习笔记(二十四)

本文介绍了Go语言代码的部署方法,包括理解目标平台、压缩二进制文件大小、使用Docker、下载与验证二进制文件、使用goget以及通过包管理器发布代码。强调了Go语言的跨平台特性和二进制文件的独立性。同时,讨论了如何通过Docker简化部署流程,并提到了验证文件完整性的方法。

一、部署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 压缩二进制文件的大小

  1. 发布Go语言代码很简单:通过编译生成一个二进制文件,其中包含运行程序所需的一切因此我们无须考虑依赖的问题。在诸如Node.js和Ruby等语言中,要将应用程序部署到生产环境必须组合所有的依赖,并发布一系列文件。使用诸如Go等编译型语言时,这个过程要简单的多。使用go build命令即可。
  2. 相比起其他语言,Go语言得到的二进制文件会更大一些,这是因为它包含执行这个程序所需的一切,其中包括Go语言run-time
  3. 使用诸如Ruby和Node.js等语言时,由于run-time安装在服务器上,因此只需发布需要执行的文件。虽然Go语言生成的文件比较大,但有点事不需要任何依赖,就能在编译时指定的系统中运行。
  4. 通过使用一些编译标志课压缩便已得到的二进制文件的大小。这些标志指定省略符号表、调试信息和DWARF符号表。

    GOOS=linux go build -ldflags="-s -w"example01.go

  5. 通过上面的步骤,我们得到的二进制文件已经很小了,想要继续压缩可使用工具upx进行操作。

3 使用Docker

  1. Docker是一种在虚拟机中运行应用程序的流行方式,它提供了一种轻量级的方式,可确保无论计算机使用的是哪种操作系统,应用程序都将在相同的环境中运行,Docker使用容器来确保应用程序位于操作系统的沙箱环境中,开销比完整的虚拟机小。
  2. 当前大多数的云服务提供商都提供了基于容器的服务,可托管和运行Docker容器。这种标准化催生了大量与容器相关的工具,这帮助我们能够轻松的哦对代码进行打包和发布。“开发和运维”这指的是帮助软件小组快速、安全、平稳地发布代码。通过与其他工具结合起来使用,Docker可帮助我们完成这个过程。
  3. 通过使用Docker,可建立部署管道,这意味着开发人员只需将代码提交到仓库,几分钟之后他们就将自动发布到生产环境。
  4. Docker和Go的安装和使用

4 下载二进制文件

这里主要说一下如何验证下载的二进制文件是正确的未被窜改的


  1. 为证明可下载的文件名副其实,有两种常用的方法:一是将文件托管到有证书能证明其身份的https网站,这让证书签发机构能够在用户连接网站时验证其所有者;第二种常用的方法是提供文件的校验和
  2. 对于任何文件,都可以使用相关的校验和查看器来查看其校验和。Go语言命令如下:
    在这里插入图片描述
    在这里,我失败了,应该是缺少相应的包

5 使用go get

  1. 我们可以将自己编写的第三方包发布到Github网站,用户只要执行go get 命令即可:
  2. go get 命令其实等价于 git clone和go install命令的结合
  3. 所以如果报错的话亦可以先将第三方包从github网站上下载下来,在使用go install命令安装

6 通过包管理器发布代码

虽然通过互联网分享文件是一种简单地额Go程序分享方式,单操作系统大多数都有用于分发代码的官方或者非官方包管理器,这最终让用户能够以一致的方式安装软件,很多包管理器还提供了其他安全功能,如自动比较校验和或要求开发人员对包进行数字签名。下面是一些流行的包管理器及其应用的平台。
在这里插入图片描述

7 相关问答

7.1 该如何分享自己编写的软件?通过电子邮件发送、上传到网上工人下载还是使用Docker?

如果要部署Web应用,使用Docker是不错的选择;如果要分享命令行工具,将其上传到网上供人下载或使用go get是不错的选择;如果编写的是固件,则可能需要采用完全不同的分享方式。最重要的是文件的接收者能够验证其完整性。为此,发送或发布校验和是不错的选择,根据要在多大程度上保证文件名副其实,可能还需要考虑对文件进行数字签名

7.2 Go二进制文件真的不需要依赖吗?

不需要。但要注意编译时的环境设置

参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值