阅读准备:会创建文件、打开终端并理解命令退出状态即可;本章不要求先掌握 Go 语法,安装后用最小程序验证工具链。
要点
安装编译器、让终端找到命令、让项目找到依赖是三件事。go version 成功只证明第一条链路,不证明当前目录已经是模块。
概述
作为PHP开发者,第一次接触Go需要了解Go的开发环境和工具链配置。Go的开发环境与PHP有显著不同,主要体现在编译型语言特性和工具链设计上。
环境搭建
1. 安装Go SDK
下载和安装
- 官方网站: go.dev/dl
- 推荐版本: Go 1.27+(当前稳定版本;本文命令均以 1.27 为基准验证,版本历史见 Go 官方发布说明)
- 安装方式:
- Windows: 下载msi安装包,按向导安装
- macOS: 使用Homebrew:
brew install go - Linux: 下载tar.gz包或使用包管理器
验证安装
go version
1. 输出示例: go version go1.27.1 darwin/amd64
go env
1. 查看Go环境变量
2. 理解Go环境变量
核心环境变量
# 安装器通常会设置好 Go 本身的位置;不要为了“配置环境”手动覆盖 GOROOT。
go env GOROOT GOPATH GOBIN
1. 只有需要自定义工具安装目录时才设置 GOBIN;随后把它加入当前 shell 的 PATH。
export GOBIN="$HOME/go/bin"
export PATH="$PATH:$GOBIN"
1. 代理和校验和数据库是网络/供应链策略,先查看当前值。
go env GOPROXY GOSUMDB
1. 若组织提供了受信任代理,再按其文档设置;不要为解决下载问题直接关闭 GOSUMDB。
1. go env -w GOPROXY=https://<trusted-proxy>,direct
与PHP的对比
| PHP | Go |
|---|---|
| 解释型语言,无需编译 | 编译型语言,需要编译 |
| php.ini配置文件 | 环境变量配置 |
| Composer包管理 | Go Modules |
| 即时运行 | 编译后运行 |
3. Go Modules
初始化模块
# 创建项目目录
mkdir hello-go
cd hello-go
1. 初始化Go模块
go mod init github.com/your-username/hello-go
1. 项目结构
hello-go/
├── go.mod # 模块定义文件
├── go.sum # 依赖版本锁定
├── main.go # 主程序文件
└── README.md # 项目说明
依赖管理
# 为可复现实验添加明确版本;版本号应来自当前项目的兼容矩阵或官方发布说明。
go get github.com/gin-gonic/gin@v1.12.0
1. 检查本次实际解析到的模块,再提交 go.mod 与 go.sum。
go list -m github.com/gin-gonic/gin
1. 移除依赖
go get github.com/gin-gonic/gin@none
1. 整理依赖
go mod tidy
1. 查看依赖图
go mod graph
@latest 会随执行日期改变解析结果,不适合作为教程的可复现默认。练习升级时可先在独立分支运行 go get 模块@目标版本、go mod tidy 和项目测试,审阅 go.mod、go.sum 与行为差异后再合并。go mod tidy 会增删依赖,执行前应确保工作区干净,以便检查它修改了什么。
开发工具配置
1. VS Code 配置
编辑器支持
VS Code 的 Go 扩展用于把诊断、跳转、格式化和测试等能力接入编辑器。先确保终端中的 go version 与 go test ./... 能工作,再检查编辑器是否使用同一套工具链;扩展不能替代 Go 安装。其他测试面板或结构浏览扩展按需选择,不是完成本课程的必需条件。
推荐配置 (settings.json)
{
"go.formatOnSave": true,
"go.testTimeout": "30s",
"go.testFlags": ["-v"]
}
2. GoLand 配置
项目设置
- GOPATH: 设置为
$HOME/go - Go Modules: 启用Go Modules支持
- File Watchers: 配置go fmt和go imports
- Terminal: 使用Go enabled terminal
3. 常用Go工具
开发工具
# 格式化代码
go fmt ./...
1. 导入包整理
goimports -w .
1. 静态检查
go vet ./...
1. 代码检查 (golangci-lint)
golangci-lint run
1. 依赖检查
go mod why github.com/gin-gonic/gin
构建与运行
# 编译
go build -o hello main.go
1. 运行
go run main.go
1. 在模块根目录安装 main 包为二进制文件
go install .
1. 交叉编译
GOOS=linux GOARCH=amd64 go build -o hello-linux main.go
GOOS=windows GOARCH=amd64 go build -o hello.exe main.go
第一个Go程序
1. Hello World 程序
// main.go
package main
import "fmt"
func main() {
fmt.Println("hello-go toolchain-ready")
}
这个程序只验证编译器能编译并运行当前模块中的 main.go;还应在同一目录运行 go env GOMOD,确认输出是该目录下的 go.mod,而不是空设备。它不安装 SDK,也不下载依赖。
预期输出:
hello-go toolchain-ready
2. 编译和运行
# 直接运行 (开发阶段)
go run main.go
1. hello-go toolchain-ready
1. 编译为可执行文件
go build -o hello main.go
1. 运行编译后的文件
./hello
1. hello-go toolchain-ready
3. 与PHP的对比
PHP版本
<?php
echo "Hello, PHP!\n";
echo "我是PHP开发者\n";
关键差异
- 包声明: Go需要
package main - 导入语句: 使用
import而不是require/include - 入口函数: 必须有
main()函数 - 分号: Go的分号是可选的(编译器自动添加)
- 编译运行: Go需要编译,PHP解释执行
实践练习
练习1: 环境验证
# 创建练习项目
mkdir go-practice
cd go-practice
go mod init github.com/your-username/go-practice
1. 创建main.go
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Go环境配置成功!")
}
EOF
1. 运行程序
go run main.go
练习2: 包管理实践
本篇的 Web 服务预览用到了 Gin 框架,超出基础语法范围,详见 Gin 框架入门。
# 添加一个Web框架依赖
go get github.com/gin-gonic/gin
1. 查看go.mod文件
cat go.mod
1. 创建简单的Web服务(放入子目录,避免与练习1 的 main.go 同目录双 main 冲突)
mkdir -p cmd/web
cat > cmd/web/main.go << 'EOF'
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello from Gin!",
})
})
r.Run(":8080")
}
EOF
1. 运行Web服务
go run ./cmd/web
检查清单
- [ ] Go SDK安装成功 (go version)
- [ ] 环境变量配置正确 (go env)
- [ ] Go Modules工作正常 (go mod init)
- [ ] 开发工具配置完成 (VS Code/GoLand)
- [ ] 第一个Go程序运行成功
- [ ] 包管理基本操作掌握
- [ ] 常用开发工具命令熟悉
完成环境搭建后,你可以继续学习:
- Go基础语法: 变量、常量、函数与方法
- 控制流程: 条件语句、循环语句
- 数据结构: 数组、切片、映射、结构体
- 面向对象: Go 的接口与组合式设计
学习提示: Go的环境配置相比PHP更复杂一些,但一旦配置完成,后续的开发体验会非常流畅。建议花时间熟悉Go的工具链,这将大大提高你的开发效率。
延伸阅读
- 第一个 Go 程序——装完 Go 就能写出第一个程序
- Go语言25个关键字详解——先认一遍 25 个关键字,读后面的代码会顺很多