下載對應版本的 go 版本
https://go.dev/dl/
配置 vim ~/.zshrc
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source ~/.zshrc
>>>>>> go version
goland 配置:
🔍 一、什么是GOPATH?
GOPATH 是舊的項目結構管理方式(Go Modules 出現前),它要求所有代碼必須放在 $GOPATH/src 目錄下,并通過 go get 下載依賴。
- 默認 GOPATH 是 ~/go。
- 所有第三方依賴都放在 ~/go/pkg,所有項目放在 ~/go/src。
- 缺點:代碼必須放在固定位置,很不靈活。
? 二、什么是Go Modules?(Go 1.11+ 推薦使用)
Go Modules 是 Go 推薦的依賴管理方式,從 Go 1.16 開始默認啟用。
優點包括:
- 不需要依賴 GOPATH。
- 支持多項目、多模塊開發。
- 每個項目可以獨立管理依賴(go.mod 就像 Python 的 requirements.txt)。有 go.mod 就是表示 go modules 了
? go_study git:(main) ? go mod init go_study
go: creating new go.mod: module go_study
go: to add module requirements and sums:go mod tidy>>>>>go mod init gin-api-template (初始化項目)
含義:
- 創建了當前項目的模塊管理文件 go.mod。
- go_study 是你的模塊名(可以是本地名,也可以是 Git 地址)。
- 這相當于 npm init 或 pip init。
簡單的gin 使用
安裝依賴
go mod tidy>>>>>go get github.com/gin-gonic/gin
命令 | 作用 | 說明 |
---|---|---|
go get github.com/gin-gonic/gin | 顯式添加某個依賴 | 會將 gin 添加到 go.mod 的 require 中,并下載到 go.sum |
go mod tidy | 整理依賴(推薦常用) | 自動添加“用到了但未聲明”的依賴,刪除“聲明了但沒用”的依賴 |
你沒有寫import:
- ? 執行 go mod tidy:什么都不干(因為沒用到)。
- ? 執行 go get:它會強行添加這個依賴(即使沒用到)。
main.go
package mainimport ("fmt""go_study/gin_test"
)func main() {fmt.Println("Hello, Go Modules!")gin_test.GinHttp()
}
gin_test/gin_testa.go
package gin_testimport "github.com/gin-gonic/gin"func GinHttp() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})r.Run(":8080")
}
運行 main.go 就可以看到了。
Go 導包與函數調用行為
1.多個文件的組織方式
在 Go 中,同一個目錄下的多個 .go 文件,只要 package 名一樣(如 package gin_test)就會視為同一個包,這些文件的內容會被編譯器自動合并成一個整體。
也就是說:
// gin_testa.go
package gin_testfunc GinHttp() {// 實現 A
}// gin_testb.go
package gin_testfunc GinHttp() {// 實現 B
}
👆這種寫法是不允許的,編譯時會報錯:GinHttp redeclared in this block,因為你定義了兩個同名函數在同一個包里,Go 是靜態強類型語言,不允許重復定義同名標識符。
? 和 Python 的對比(重要)
對比項 | Go | Python |
---|---|---|
包管理 | 編譯期檢查,結構嚴格 | 動態加載,結構靈活 |
導入行為 | 顯式導入包名后調用函數 | 可以直接導入函數/類 |
文件作用域 | 同一包下自動合并多個 .go 文件 | 每個 .py 文件都是獨立模塊 |
- Go 不像 Python 動態導入模塊那樣“運行到才執行”,而是編譯前統一構建;
- 同一個 package 下的多個文件函數名不能重復;
- 如果你希望有兩個同名函數,請把它們放在不同 package下;
- 合理使用模塊和包組織,是 Go 項目整潔的關鍵。
Go 是一個 面向組合而不是面向繼承 的語言。它沒有傳統 OOP 的 class 關鍵字,但你完全可以通過 struct + method(方法) 實現“類”的大多數功能。
特性 | Go 中的實現 |
---|---|
類 | 用 struct 替代 |
方法 | func (r *Receiver) Method() |
構造函數 | 自己寫一個返回 struct 的函數 |
繼承 | 不支持,使用組合代替 |
接口 | 內嵌接口 + duck typing(非常強) |
多態 | 接口實現自動判定 |
配置熱重載
air 是 Go 社區最流行的熱重載工具,類似于 Python 中的 uvicorn --reload。
go install github.com/air-verse/air@latest
?? 安裝后需將 $GOPATH/bin 添加到你的 PATH:
# 確保 GOPATH/bin 加入 PATH
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc# 驗證 air 安裝成功
which air
air -v
第一步:在項目根目錄運行一次(生成配置文件):
air init
這會在當前目錄生成一個 .air.toml 配置文件。
第二步:運行熱更新服務
在項目根目錄執行:
air
這會自動監控你的 Go 文件,一旦你修改代碼,它會自動重啟服務(像 FastAPI 的 uvicorn --reload 一樣)。