Git是Golang項目代碼版本控制的基礎工具,用于追蹤代碼變更、分支管理和協作開發。
git init
初始化本地倉庫;使用git add .
添加所有文件,git commit -m "Initial commit"
提交初始版本。git remote add origin https://github.com/yourname/repo.git
),并通過git push -u origin main
推送代碼。# Go
/bin/
/vendor/
*.exe
*.test
*.prof
# IDE
.vscode/
.idea/
這樣可以避免將臨時文件納入版本控制,保持倉庫整潔。Go Modules是Golang官方推薦的依賴管理工具,用于記錄項目依賴的模塊及版本,確保構建一致性。
go mod init <module-name>
(如go mod init github.com/yourname/repo
),生成go.mod
文件(記錄模塊路徑和Go版本)和go.sum
文件(記錄依賴的校驗和)。go mod tidy
自動下載并記錄依賴版本;如需手動指定版本,可使用go get <module>@<version>
(如go get github.com/pkg/errors@v0.9.1
)。go.mod
和go.sum
納入Git版本控制,確保團隊成員或CI/CD環境使用相同的依賴版本。為了標識打包版本,可在編譯時通過-ldflags
參數將版本信息(如版本號、構建時間)嵌入二進制文件。
main.go
):package main
import (
"fmt"
)
var version string // 版本號由編譯時注入
func main() {
fmt.Printf("Version: %s\n", version)
}
-ldflags
參數指定版本(如go build -ldflags "-X main.version=1.0.0" -o myapp
),生成的可執行文件會包含該版本信息,運行時可通過./myapp
查看。語義化版本(SemVer,格式為MAJOR.MINOR.PATCH
)是Golang項目的推薦版本規范,結合Git Tag可標記發布版本。
v1.1.0
(MINOR版本遞增);v1.0.1
(PATCH版本遞增);v2.0.0
(MAJOR版本遞增,需調整模塊路徑,如module github.com/yourname/repo/v2
)。git tag -a v1.0.0 -m "Release version 1.0.0"
(-a
表示附注Tag,-m
添加說明);git push origin v1.0.0
。通過CI/CD工具(如GitHub Actions)實現“提交即構建、打標即發布”,確保版本的一致性和交付效率。
.github/workflows/build.yml
):name: Build and Release
on:
push:
tags:
- 'v*' # 僅當推送Tag時觸發
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'
- name: Build
run: go build -ldflags "-X main.version=${{ github.ref_name }}" -o myapp .
- name: Run Tests
run: go test -v ./...
- name: Push Docker Image
uses: docker/build-push-action@v3
with:
context: .
push: true
tags: yourregistry/myapp:${{ github.ref_name }}
該配置會在推送v*
格式的Tag時,自動構建應用、運行測試,并推送Docker鏡像到倉庫,實現自動化發布。若需要在同一臺Ubuntu機器上管理多個Golang版本(如開發不同項目時切換),可使用版本管理工具(如GVM、goenv)。
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
;gvm install go1.20.5
;gvm use go1.20.5
(全局切換需用gvm use go1.20.5 --default
)。git clone https://github.com/syndbg/goenv.git ~/.goenv
;export GOENV_ROOT="$HOME/.goenv"
和eval "$(goenv init -)"
添加到~/.bashrc
;goenv install go1.21.0
、goenv global go1.21.0
。