阅读准备:会创建文件、打开终端并理解命令退出状态即可;本章不要求先掌握 Go 语法,安装后用最小程序验证工具链。
要点
安装编译器、让终端找到命令、让项目找到依赖是三件事。go version 成功只证明第一条链路,不证明当前目录已经是模块。
概述
作为 PHP 开发者,第一次接触 Go 需要了解 Go 的开发环境和工具链配置。Go 的开发环境与 PHP 有显著不同,主要体现在编译型语言特性和工具链设计上。
环境搭建
1. 安装 Go SDK
下载和安装
- 官方网站: go.dev/dl
- 推荐版本: Go 1.27+(当前稳定版本,详见 README 技术基线区块)
- 安装方式:
- 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.useLanguageServer": true,
"go.autocompleteUnimportedPackages": true,
"go.docsTool": "godoc",
"go.inferGopath": false,
"go.lintTool": "golangci-lint",
"go.lintOnSave": "workspace",
"go.formatTool": "goimports",
"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. 安装二进制文件
go install github.com/your-username/hello-go
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!
1. 我是从PHP转来的开发者
1. 编译为可执行文件
go build -o hello main.go
1. 运行编译后的文件
./hello
1. Hello, Go!
1. 我是从PHP转来的开发者
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 框架,超出 basics 范围,详见 ../frameworks/01-gin-framework-basics.md。
# 添加一个Web框架依赖
go get github.com/gin-gonic/gin
1. 查看go.mod文件
cat go.mod
1. 创建简单的Web服务
cat > web.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 web.go
检查清单
- [ ] Go SDK 安装成功 (go version)
- [ ] 环境变量配置正确 (go env)
- [ ] Go Modules 工作正常 (go mod init)
- [ ] 开发工具配置完成 (VS Code/GoLand)
- [ ] 第一个 Go 程序运行成功
- [ ] 包管理基本操作掌握
- [ ] 常用开发工具命令熟悉
下一步
完成环境搭建后,你可以继续学习: – Go 基础语法: 变量、函数、数据类型 – 控制流程: 条件语句、循环语句 – 数据结构: 数组、切片、映射、结构体 – 面向对象: Go 的 OOP 实现方式
学习提示: Go 的环境配置相比 PHP 更复杂一些,但一旦配置完成,后续的开发体验会非常流畅。建议花时间熟悉 Go 的工具链,这将大大提高你的开发效率。
最后更新: 2025年9月