强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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 安装

  1. 访问 https://go.dev/dl/
  2. 下载 go1.24.2.windows-amd64.msi
  3. 双击安装,默认路径 C:\Program Files\Go
  4. 安装程序自动配置环境变量
# 验证(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

核心环境变量

变量说明默认值
GOROOTGo 安装路径/usr/local/go
GOPATH工作空间路径~/go
GOPROXY模块代理https://proxy.golang.org,direct
GO111MODULE模块模式on
GOPRIVATE私有模块匹配
GONOSUMCHECK跳过校验的模块
CGO_ENABLED是否启用 CGO1
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/gin@v1.9.1
go get github.com/gin-gonic/gin@main  # 指定分支

# 获取指定版本
go get golang.org/x/text@v0.14.0

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/errors@v0.9.1
go mod edit -replace github.com/old/pkg=github.com/new/pkg@v1.0.0
go mod edit -exclude github.com/bad/pkg@v1.0.0

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."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"

2.6 IDE 配置

VS Code(推荐)

  1. 安装 VS Code
  2. 安装 Go 扩展:golang.go
  3. 安装工具链(首次打开 .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 工具

工具用途安装命令
goplsLSP 语言服务器go install golang.org/x/tools/gopls@latest
goimportsimport 管理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
gomodifytagsstruct tag 管理go install github.com/fatih/gomodifytags@latest
mockgenMock 生成go install go.uber.org/mock/mockgen@latest
wire依赖注入go install github.com/google/wire/cmd/wire@latest
swagSwagger 文档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

🏢 业务场景

  1. 团队统一环境:使用 go env -w 写入配置脚本,新人一键配置
  2. CI/CD 环境:使用 GOPROXY 配置内网代理,加速构建
  3. 私有仓库:配置 GOPRIVATE + Git SSH,避免认证问题
  4. Monorepo:使用 go.work 管理多个关联模块

📖 扩展阅读