Go 訓(xùn)練營系列中的 DevOps

為什么在 Go 中使用 DevOps?
目前,大多數(shù) DevOps 工程師都使用Python它作為他們的 DevOps 編程語言。但是Python伴隨著一些編譯時和服務(wù)擴展問題。
例如,簡單地升級到新版本的 Python ( Python2 to Python3, Python3.7 to Python3.11) 可能會導(dǎo)致您現(xiàn)有的腳本停止工作。當出現(xiàn)兼容性問題時,回滾到舊版本的 Python 并不容易。
現(xiàn)在在云時代,Go已經(jīng)成為云原生編排和應(yīng)用的事實語言。Go隨附您在工具可靠性和擴展能力方面取得巨大進步所需的所有工具。
快速瀏覽 Go 官方網(wǎng)站,您可以看到以下公司(以及更多公司)已經(jīng)在使用 Go(https://golang.google.cn/solutions/#case-studies):

比如:Docker-compose, kubernetes, istio, k3s, prometheus, argocd, terraform, 等。你可以看到越來越多的云服務(wù)軟件在使用Go。對于 DevOps 工程師,我個人認為采用 DevOps 編程語言很重要,它將幫助您掌握新的云原生應(yīng)用程序,并使您在職業(yè)生涯中保持競爭力。
Go版本
如今,Go團隊已經(jīng)將版本的發(fā)布節(jié)奏穩(wěn)定在每年兩次大發(fā)布,通常是二月和八月。Go 團隊承諾為最新的兩個穩(wěn)定主要版本的 Go 提供支持。
例如,如果最新的主要版本是Go 1.17,那么 Go 團隊將提供對Go 1.17和Go 1.16提供支持。支持范圍主要包括版本重大問題修復(fù)、文檔變更、安全問題更新等。
我建議您選擇最新Go版本。因為穩(wěn)定版的平均質(zhì)量Go一直都很高,很少有影響使用的大bug。您不必太擔心新版本的支持。Google 自己的產(chǎn)品,例如 Google App Engine,將很快支持它。
在 Linux 服務(wù)器上安裝 Go v1.19.3
Go支持幾乎所有主流Linux發(fā)行版操作系統(tǒng)。常見的有Ubuntu、CentOS、Fedora、SUSE等,Go在這些主流的Linux發(fā)行版操作系統(tǒng)上的安裝方法都是一樣的(當然某些發(fā)行版也可能使用其軟件安裝管理器只提供自己的安裝方法)??梢詤⒖家韵掳惭b步驟(https://golang.org/doc/install)
-
Go v1.19.3從其官網(wǎng)下載:
$ 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
- 如果您已經(jīng)這樣做了,請把“/usr/local/go/bin”添加到環(huán)境變量中
$ 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
現(xiàn)在我們已經(jīng)Go安裝成功了,讓我們來創(chuàng)建我們的第一個Go程序吧!
- 在主目錄下創(chuàng)建一個文件夾
godev
$ mkdir godev
- 在
godev中創(chuàng)建文件夾helloworld
$ cd godev
$ mkdir helloworld
$ cd helloworld
- 創(chuàng)建
main.go文件內(nèi)容如下(注意,在Go中,我們通常直接將多個單詞拼接起來作為源文件名,而不是使用下劃線或其他分隔符,這是因為下劃線在Go中有特殊的作用)。
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}
- 運行:
$ go fmt main.go
$ go run main.go
Hello, world
恭喜,你剛剛成功運行了你的第一個 go helloworld程序!
源碼分析
現(xiàn)在您已經(jīng)成功運行了第一個 Go 程序,讓我們檢查每一行
package main
這定義了一個包Go。包是Go語言的基本單位,Go程序本質(zhì)上是包的集合。
在我們的示例中,它告訴 Go 編譯器創(chuàng)建可執(zhí)行文件而不是庫文件。如果您以不同的方式命名包,您將運行 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
但是您仍然可以構(gòu)建它,但它不會生成任何可執(zhí)行文件:
$ go build main.go
$ ls
main.go
import
顧名思義,這個import關(guān)鍵字從 $GOPATH 目錄(如果沒有提到路徑)或從提到的目錄中導(dǎo)入指定的包。
在我們的例子中,fmt是一個包的名稱,它也代表了包的導(dǎo)入路徑,也就是fmt標準庫下的目錄。
func
func是 中的關(guān)鍵字Go,用于創(chuàng)建函數(shù)。語法如下:
func function_name(Parameter-list)(Return_type){
// function body.....
}
這里的main函數(shù)比較特殊:當你運行一個可執(zhí)行Go程序時,所有的代碼都會從這個入口函數(shù)開始運行。
fmt.Println
fmt包使用類似于 C 的 printf() 和 scanf() 函數(shù)的函數(shù)實現(xiàn)格式化 I/O。該fmt.Println()函數(shù)使用默認格式的運算對象并寫入標準輸出。最后添加一個換行符。
Go IDE
我推薦你使用GoLand或VsCode。但是 GoLand 每月花費 19.90 美元或每年 199.00 美元。VsCode 是免費的,這就是我使用的。要使用 VsCode 設(shè)置 Go,您只需遵循 VsCode 官方文檔:https ://code.visualstudio.com/docs/languages/go

Have a nice day, Happy coding.