Go 语言完全指南 / 02 - 环境搭建:安装、GOPATH、Go Modules、IDE 配置
02 - 环境搭建
2.1 安装 Go
Linux 安装
# 方法一:官方二进制安装
wget https://go.dev/dl/go1.24.2.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.24.2.linux-amd64.tar.gz
# 添加到 PATH(写入 ~/.bashrc 或 ~/.zshrc)
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
# 使配置生效
source ~/.bashrc
# 验证安装
go version
# 方法二:使用包管理器(版本可能不是最新)
# Ubuntu/Debian
sudo apt install golang-go
# Fedora
sudo dnf install golang
# Arch Linux
sudo pacman -S go
macOS 安装
# 方法一:Homebrew(推荐)
brew install go
# 方法二:官方安装包
# 下载 .pkg 文件:https://go.dev/dl/
# 双击安装即可
# 验证
go version
Windows 安装
- 访问 https://go.dev/dl/
- 下载
go1.24.2.windows-amd64.msi - 双击安装,默认路径
C:\Program Files\Go - 安装程序自动配置环境变量
# 验证(PowerShell)
go version
go env
2.2 环境变量
Go 使用 go env 查看和管理环境变量:
# 查看所有环境变量
go env
# 查看特定变量
go env GOPATH
go env GOROOT
go env GOPROXY
# 设置环境变量
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
核心环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
GOROOT | Go 安装路径 | /usr/local/go |
GOPATH | 工作空间路径 | ~/go |
GOPROXY | 模块代理 | https://proxy.golang.org,direct |
GO111MODULE | 模块模式 | on |
GOPRIVATE | 私有模块匹配 | 空 |
GONOSUMCHECK | 跳过校验的模块 | 空 |
CGO_ENABLED | 是否启用 CGO | 1 |
GOOS | 目标操作系统 | 当前系统 |
GOARCH | 目标架构 | 当前架构 |
国内代理配置
# 推荐使用七牛云代理(中国开发者必配)
go env -w GOPROXY=https://goproxy.cn,direct
# 或使用阿里云代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# 私有仓库配置
go env -w GOPRIVATE=git.example.com,*.corp.example.com
2.3 GOPATH 工作空间
GOPATH 是 Go 传统的项目管理方式(Go 1.11 之前唯一方式):
$GOPATH/
├── bin/ # 可执行文件
├── pkg/ # 编译后的包对象
│ └── linux_amd64/
│ └── github.com/
│ └── user/
│ └── pkg.a
└── src/ # 源代码
└── github.com/
└── user/
└── project/
└── main.go
# GOPATH 模式下的工作流
export GOPATH=$HOME/go
mkdir -p $GOPATH/src/github.com/myuser/myproject
cd $GOPATH/src/github.com/myuser/myproject
# 编写代码
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Hello from GOPATH mode!")
}
EOF
# 获取依赖
go get github.com/some/package
# 安装
go install
⚠️ 注意:GOPATH 模式已被 Go Modules 取代,不推荐新项目使用。但理解 GOPATH 有助于理解 Go 的历史和一些遗留项目。
2.4 Go Modules
Go Modules 是 Go 1.11 引入的依赖管理系统,从 Go 1.13 开始默认启用。
初始化模块
# 创建项目目录
mkdir myproject && cd myproject
# 初始化模块
go mod init github.com/myuser/myproject
# 生成的 go.mod 文件
cat go.mod
// go.mod
module github.com/myuser/myproject
go 1.24
添加依赖
# 方法一:直接在代码中 import,然后运行
go mod tidy
# 方法二:显式获取
go get github.com/gin-gonic/gin@latest
go get github.com/gin-gonic/[email protected]
go get github.com/gin-gonic/gin@main # 指定分支
# 获取指定版本
go get golang.org/x/[email protected]
go.mod 命令
# 整理依赖(添加缺失的,删除无用的)
go mod tidy
# 下载依赖到本地缓存
go mod download
# 查看依赖图
go mod graph
# 解释为什么需要某个依赖
go mod why github.com/some/package
# 验证依赖
go mod verify
# 编辑 go.mod(一般直接编辑文件)
go mod edit -require github.com/pkg/[email protected]
go mod edit -replace github.com/old/pkg=github.com/new/[email protected]
go mod edit -exclude github.com/bad/[email protected]
go.mod 进阶语法
module github.com/myuser/myproject
go 1.24
require (
github.com/gin-gonic/gin v1.9.1
github.com/go-sql-driver/mysql v1.7.1
golang.org/x/sync v0.6.0
)
// 替换依赖(本地开发调试用)
replace github.com/old/pkg => ../local/pkg
// 排除有问题的版本
exclude github.com/bad/pkg v1.0.0
// retract 撤回已发布的版本
retract v1.0.0 // 发现严重 bug
go.sum 文件
github.com/gin-gonic/gin v1.9.1 h1:4idE...
github.com/gin-gonic/gin v1.9.1/go.mod h1:1U...
go.sum记录每个依赖的哈希值,确保完整性- 应该提交到 Git
- 使用
go mod verify校验
工作区(Workspace)
Go 1.18 引入工作区模式,用于同时开发多个模块:
# 创建工作区
go work init ./moduleA ./moduleB
# 添加模块
go work use ./moduleC
# 生成 go.work 文件
cat go.work
// go.work
go 1.24
use (
./moduleA
./moduleB
./moduleC
)
// 替换(和 go.mod 中的 replace 类似)
replace github.com/dep/pkg => ./local/pkg
⚠️ 注意:go.work 文件不应提交到版本库,建议添加到 .gitignore。
2.5 GOPROXY 与私有仓库
# 场景:公司内部 Git 仓库
go env -w GOPRIVATE=gitlab.mycompany.com,github.com/mycompany/*
go env -w GONOSUMCHECK=gitlab.mycompany.com
# 如果需要通过 SSH 访问私有仓库
git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
2.6 IDE 配置
VS Code(推荐)
- 安装 VS Code
- 安装 Go 扩展:
golang.go - 安装工具链(首次打开 .go 文件时会提示)
// settings.json 推荐配置
{
"go.useLanguageServer": true,
"go.lintTool": "golangci-lint",
"go.lintFlags": ["--fast"],
"go.formatTool": "goimports",
"go.testFlags": ["-v", "-count=1"],
"go.coverOnSave": true,
"editor.formatOnSave": true,
"[go]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
# 手动安装常用工具
go install golang.org/x/tools/gopls@latest # LSP 服务器
go install golang.org/x/tools/cmd/goimports@latest # 自动管理 import
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest # 综合 linter
go install github.com/go-delve/delve/cmd/dlv@latest # 调试器
go install github.com/ramya-rao-a/go-outline@latest # 大纲视图
GoLand(JetBrains)
- 开箱即用,无需额外配置
- 付费软件,但功能最全面
- 支持远程开发、数据库工具、Docker 集成
Vim/Neovim
" 使用 gopls + nvim-lspconfig
" init.lua 中添加:
require'lspconfig'.gopls.setup{
settings = {
gopls = {
analyses = {
unusedparams = true,
},
staticcheck = true,
gofumpt = true,
},
},
}
2.7 常用 Go 工具
| 工具 | 用途 | 安装命令 |
|---|---|---|
| gopls | LSP 语言服务器 | go install golang.org/x/tools/gopls@latest |
| goimports | import 管理 | go install golang.org/x/tools/cmd/goimports@latest |
| golangci-lint | 综合静态分析 | go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest |
| delve | 调试器 | go install github.com/go-delve/delve/cmd/dlv@latest |
| gomodifytags | struct tag 管理 | go install github.com/fatih/gomodifytags@latest |
| mockgen | Mock 生成 | go install go.uber.org/mock/mockgen@latest |
| wire | 依赖注入 | go install github.com/google/wire/cmd/wire@latest |
| swag | Swagger 文档 | go install github.com/swaggo/swag/cmd/swag@latest |
| air | 热重载 | go install github.com/air-verse/air@latest |
2.8 验证环境
创建一个测试程序验证环境:
package main
import (
"fmt"
"os/exec"
"runtime"
)
func main() {
fmt.Println("=== Go 环境检查 ===")
fmt.Printf("Go 版本: %s\n", runtime.Version())
fmt.Printf("OS/ARCH: %s/%s\n", runtime.GOOS, runtime.GOARCH)
fmt.Println()
// 检查工具是否安装
tools := []string{"gopls", "dlv", "golangci-lint"}
for _, tool := range tools {
path, err := exec.LookPath(tool)
if err != nil {
fmt.Printf("❌ %s: 未安装\n", tool)
} else {
fmt.Printf("✅ %s: %s\n", tool, path)
}
}
}
go run main.go
🏢 业务场景
- 团队统一环境:使用
go env -w写入配置脚本,新人一键配置 - CI/CD 环境:使用
GOPROXY配置内网代理,加速构建 - 私有仓库:配置
GOPRIVATE+ Git SSH,避免认证问题 - Monorepo:使用
go.work管理多个关联模块