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
。