Go(又稱 Golang )是 Google 開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言
Docker 和 Kubernetes 都是使用 Go 進行開發的,這幾年 Go 越來越流行,生態也越來越好了
初學 Go 的時候會遇到了一些小問題,在一些教程中沒有提及或者因為時效性的緣故,經常需要查閱很多資料才能弄懂,所以想寫一篇比較新人視角的文章幫助大家入門
安裝
Go 的官網就是 golang.org,點選首頁的 Download Go 就可以跳轉到下載頁面,然後下載對應作業系統的 Go,如果國內訪問緩慢,可以訪問映象站:golang.google.cn,官方安裝教程:Download and install
Windows 只要下載對應的 msi 檔案,然後開啟後按照提示基本上就是下一步下一步... 具體可以參考這篇部落格:Windows Go 開發環境下載、安裝並配置,安裝完成後 Windows 需要 Win鍵 + R鍵,然後輸入 cmd
,輸入 go version
,顯示版本號就說明安裝完成
GOPROXY
國內下載依賴庫會比較緩慢,所有我們需要配置 Go Proxy 加速依賴下載(有點像 Java 中修改 Maven 映象倉庫),這裡映象源使用 七牛雲
go env -w GOPROXY=https://goproxy.cn,direct
也可以通過 go env
檢視所有的 Go 環境變數,其中就包括 GOPROXY,這個變數定義的就是配置 Go 映象
Hello World
推薦使用 JetBrains 家的 GoLand,使用體驗基本和 JetBrains 家的其他軟體例如:IDEA、PyCharm 相似,還有一種也比較主流,就是使用 VSCode 配合 Go 外掛,可以參考:VsCode Go外掛配置最佳實踐指南,相對來說需要比較多的配置,而且除錯比較麻煩,對於新手不是很友好
Go 聖經中也有更詳細的 Hello, World 教程
新建檔案 :helloworld.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
注意 package 必須指定為 main
否則無法執行
靜態編譯 Go 程式碼,在程式碼對應的目錄開啟命令列
go build helloworld.go
這時候當前目錄會生產可執行檔案:helloworld
helloworld.exe
# Linux 或者 Mac 下執行的命令是:./helloworld
就可以執行,也可以通過 run 命令,直接編譯+執行
go run helloworld.go
Go Modules
Go modules 是 Go 語言的依賴解決方案,詳細可以檢視 官方 Modules Wiki,Go 最早使用的依賴解決方案是:GOPATH,然後使用Go Vendor ,這兩種方案都並不是特別好用,現在還可以搜尋到很多舊教程是教你用這兩種管理依賴的,所以讓使初學者很困惑
Go 1.11 正式推出 Go Modules,Go 環境變數中新增了:GO111MODULE
(111指的就是版本11.1),用來控制 Go Modules 是否啟用,Go 1.16 開始其預設值設定為 on
。GO111MODULE 的值為 off 表示禁用 Go Modules,on 表示啟用,而 auto 表示當專案在 $GOPATH/src 外且專案根目錄有 go.mod 檔案時,自動開啟 Go Modules。Go 1.14 時 Go modules 已經很穩定了,並且推薦應用在生產上,所以現在使用 Go,其實可以不考慮這些問題,直接使用 Go Modules 即可,當然如果對這個細節感興趣,可以看這兩篇部落格:Go Modules 終極入門、一文搞懂 Go Modules 前世今生及入門使用
Go Modules 提供了一些命令,列舉幾個常用的:
go mod init
生成 go.mod 檔案,(這個檔案有點類似 Maven 的 pom)go mod download
下載 go.mod 檔案中指明的所有依賴go mod tidy
整理現有的依賴
演示一下如何更新依賴,新建一個 hello.go
package main
import (
"fmt"
// 這裡引用了一個依賴
"rsc.io/quote"
)
func main() {
// 這裡使用了引用依賴的 Hello 方法
fmt.Println(quote.Hello())
}
使用 init 命令建立 go.mod
# 這裡的 example.com/hello 是自定義的 module 名稱
go mod init example.com/hello
這個時候如果執行 go build
、go install
、go run hello.go
都會提示依賴不存在
hello.go:6:2: no required module provides package rsc.io/quote; to add it:
go get rsc.io/quote
我們可以按照提示使用 go get rsc.io/quote
,用 go get
來獲取某個具體的依賴
如果有很多依賴的話,go get
就比較麻煩,可以使用 go mod tidy
,它會自動新增丟失的依賴、刪除不需要的依賴
在 go mod tidy
後,我們可以執行 go run hello.go
,這個時候程式就可以正常執行了
入門
推薦官方的互動式教程 A Tour of Go,網頁就可以敲 Go程式碼,也有中文版本:Go 指南,這個教程可以讓你快速上手,想要更細緻地學習 Go,推薦 Go語言聖經(中文版)
引用 Go語言聖經 - 入門 中的一句話:
學習一門新語言時,會有一種自然的傾向,按照自己熟悉的語言的套路寫新語言程式。學習Go語言的過程中,請警惕這種想法,儘量別這麼做
我們在解決一個問題的時候很容易思維定勢,用已經會的語言的思維思考,推薦視訊教程 神奇程式碼在哪裡Go實戰,可以看看其他人在寫 Go 的時候是如何思考的