簡單的 Go 入門教程

AaronLin發表於2021-10-18

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 提供了一些命令,列舉幾個常用的:

  1. go mod init 生成 go.mod 檔案,(這個檔案有點類似 Maven 的 pom)
  2. go mod download 下載 go.mod 檔案中指明的所有依賴
  3. 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 buildgo installgo 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 的時候是如何思考的

相關文章