Skip to content
On this page

环境与模块

安装与版本选择

https://go.dev/dl/ 获取官方构建。生产环境建议:

  • 使用次新版本当前稳定版之一,避免过旧版本缺少安全修复。
  • go version 应显示与项目 go 指令(见下)兼容的工具链。

GOROOTGOPATH

  • GOROOT:Go 安装根目录,内含标准库与编译器;一般不必手动设置。
  • GOPATH(模块时代仍保留):默认可为 ~/go,作为 go install 生成二进制默认安装路径等用途;业务代码不必须放在 GOPATH/src

模块模式下,项目可在任意路径,只要存在 go.mod

模块(go.mod

模块是一组带共同版本前缀的包,根目录的 go.mod 声明模块路径与依赖。

go
module example.com/myapp

go 1.22

require (
    golang.org/x/sync v0.7.0
)
  • go 1.xx:指定该模块使用的最低 Go 语言版本(及对应工具链行为),不是「只能用该版本编译」;较新工具链仍可编译,但会按此行启用/禁用部分语言特性检查。
  • require:直接依赖及其语义版本(SemVer tag)。

go.sum

记录依赖模块内容的加密校验和,应提交到版本库go mod tidy 会整理 require 并更新 go.sum

常用命令

命令作用
go mod init <path>在当前目录创建 go.mod
go mod tidy删未用依赖、补缺失依赖
go get pkg@version升级/降级某依赖并写回 go.mod
go list -m all列出解析后的所有模块版本

代理与校验

  • GOPROXY:如 https://proxy.golang.org,direct,加速与镜像拉取。
  • GOSUMDB:默认 sum.golang.org,校验模块与 go.sum 一致性。

工作区(go.work,可选)

多模块同仓协作时,可在仓库根放置 go.work,用 use 指向若干子模块目录,本地开发时统一解析,不必go.work 提交(团队策略可约定)。

包路径与导入

  • 导入路径字符串在源码中唯一标识包,如 fmtexample.com/myapp/internal/foo
  • 同模块内:导入路径以 go.modmodule 行 + 子目录为前缀。
  • internal 目录规则:路径含 /internal/ 的包只能被internal 父目录为根的目录树内的代码导入,用于封装实现细节。

go build / go run / go test

  • go build ./...:编译当前模块下所有包,默认不产生主包二进制到当前目录(主包需 -o)。
  • go run .:编译并运行当前目录主包。
  • go test ./...:运行测试;-race 打开数据竞争检测(性能下降明显,CI 中可选用)。

工具链指令(Go 1.21+)

go.mod 可写 toolchain go1.22.3,在本地 Go 较旧时会提示或自动获取匹配工具链(行为受 GOTOOLCHAIN 影响)。团队应在文档中约定是否启用自动升级,避免 CI 与本地不一致。

技术文库