Go 训练营系列中的 DevOps
为什么在 Go 中使用 DevOps?
目前,大多数 DevOps 工程师都使用Python
它作为他们的 DevOps 编程语言。但是Python
伴随着一些编译时和服务扩展问题。
例如,简单地升级到新版本的 Python ( Python2
to Python3
, Python3.7
to Python3.11
) 可能会导致您现有的脚本停止工作。当出现兼容性问题时,回滚到旧版本的 Python 并不容易。
现在在云时代,Go
已经成为云原生编排和应用的事实语言。Go
随附您在工具可靠性和扩展能力方面取得巨大进步所需的所有工具。
快速浏览 Go 官方网站,您可以看到以下公司(以及更多公司)已经在使用 Go(https://golang.google.cn/solutions/#case-studies):
比如:Docker-compose, kubernetes, istio, k3s, prometheus, argocd, terraform, 等。你可以看到越来越多的云服务软件在使用Go
。对于 DevOps 工程师,我个人认为采用 DevOps 编程语言很重要,它将帮助您掌握新的云原生应用程序,并使您在职业生涯中保持竞争力。
Go版本
如今,Go
团队已经将版本的发布节奏稳定在每年两次大发布,通常是二月和八月。Go 团队承诺为最新的两个稳定主要版本的 Go 提供支持。
例如,如果最新的主要版本是Go 1.17
,那么 Go 团队将提供对Go 1.17
和Go 1.16
提供支持。支持范围主要包括版本重大问题修复、文档变更、安全问题更新等。
我建议您选择最新Go
版本。因为稳定版的平均质量Go
一直都很高,很少有影响使用的大bug。您不必太担心新版本的支持。Google 自己的产品,例如 Google App Engine,将很快支持它。
在 Linux 服务器上安装 Go v1.19.3
Go
支持几乎所有主流Linux发行版操作系统。常见的有Ubuntu、CentOS、Fedora、SUSE等,Go
在这些主流的Linux发行版操作系统上的安装方法都是一样的(当然某些发行版也可能使用其软件安装管理器只提供自己的安装方法)。可以参考以下安装步骤(https://golang.org/doc/install)
-
Go v1.19.3
从其官网下载:
$ wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz --2022-11-08 08:12:19-- https://go.dev/dl/go1.19.3.linux-amd64.tar.gz
...
Saving to: ‘go1.19.3.linux-amd64.tar.gz’
go1.19.3.linux-amd64.tar.gz 100%[======================================================================================>] 142.01M 13.2MB/s in 11s
2022-11-08 08:12:30 (13.2 MB/s) - ‘go1.19.3.linux-amd64.tar.gz’ saved [148907134/148907134]
- 将 Go 二进制文件安装到“/usr/local/bin”
$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
$ ls /usr/local
bin etc games go include lib lib64 libexec sbin share src
- 如果您已经这样做了,请把“/usr/local/go/bin”添加到环境变量中
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
- 检查 Go 版本
$ which go
/usr/local/go/bin/go
$ go version
go version go1.19.3 linux/amd64
Go Hello world
现在我们已经Go
安装成功了,让我们来创建我们的第一个Go
程序吧!
- 在主目录下创建一个文件夹
godev
$ mkdir godev
- 在
godev
中创建文件夹helloworld
$ cd godev
$ mkdir helloworld
$ cd helloworld
- 创建
main.go
文件内容如下(注意,在Go
中,我们通常直接将多个单词拼接起来作为源文件名,而不是使用下划线或其他分隔符,这是因为下划线在Go
中有特殊的作用)。
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}
- 运行:
$ go fmt main.go
$ go run main.go
Hello, world
恭喜,你刚刚成功运行了你的第一个 go helloworld
程序!
源码分析
现在您已经成功运行了第一个 Go 程序,让我们检查每一行
package main
这定义了一个包Go
。包是Go
语言的基本单位,Go
程序本质上是包的集合。
在我们的示例中,它告诉 Go 编译器创建可执行文件而不是库文件。如果您以不同的方式命名包,您将运行 int 以下错误:
package command-line-arguments is not a main package
比如重命名为apple,如下:
package apple
import "fmt"
func main() {
fmt.Println("Hello, world")
}
如果你想运行使用go run main.go
:
$ go run main.go
package command-line-arguments is not a main package
但是您仍然可以构建它,但它不会生成任何可执行文件:
$ go build main.go
$ ls
main.go
import
顾名思义,这个import
关键字从 $GOPATH 目录(如果没有提到路径)或从提到的目录中导入指定的包。
在我们的例子中,fmt
是一个包的名称,它也代表了包的导入路径,也就是fmt
标准库下的目录。
func
func
是 中的关键字Go
,用于创建函数。语法如下:
func function_name(Parameter-list)(Return_type){
// function body.....
}
这里的main
函数比较特殊:当你运行一个可执行Go
程序时,所有的代码都会从这个入口函数开始运行。
fmt.Println
fmt
包使用类似于 C 的 printf() 和 scanf() 函数的函数实现格式化 I/O。该fmt.Println()
函数使用默认格式的运算对象并写入标准输出。最后添加一个换行符。
Go IDE
我推荐你使用GoLand或VsCode。但是 GoLand 每月花费 19.90 美元或每年 199.00 美元。VsCode 是免费的,这就是我使用的。要使用 VsCode 设置 Go,您只需遵循 VsCode 官方文档:https ://code.visualstudio.com/docs/languages/go
Have a nice day, Happy coding.