2、Go语言环境与项目初始化:Go安装配置、Go Modules使用、项目结构设计、第一个Go程序
2.1 安装Go语言环境
说实话,Go的安装是我见过最省心的语言之一。没有复杂的依赖,没有环境变量噩梦。你只需要去官网下载对应系统的安装包,一路下一步就行。
我个人习惯用Linux或macOS开发,但Windows也完全没问题。安装完成后,打开终端验证一下:
go version
如果看到类似 go version go1.21.0 linux/amd64 的输出,说明安装成功了。
2.2 配置GOPATH与Go Modules
嗯,这里要重点说一下。早期Go开发者都经历过GOPATH的痛苦——所有项目必须放在 $GOPATH/src 下,想想就头疼。
好在Go 1.11之后引入了Go Modules,彻底解放了大家。现在你可以在任意目录创建项目,再也不用被GOPATH束缚了。
配置Go Modules很简单,设置一个环境变量就行:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct # 国内用户建议设置
为什么要设置代理?因为Go的官方模块仓库在国外,下载速度你懂的。我在公司项目里遇到过好几次因为网络问题导致构建失败,后来统一配置了代理,世界清净了。
2.3 项目结构设计
一个清晰的项目结构,能让团队协作事半功倍。我见过太多「一团乱麻」式的Go项目,维护起来简直要命。
这里分享一个我常用的项目结构模板:
myproject/
├── cmd/ # 可执行文件入口
│ └── server/
│ └── main.go
├── internal/ # 私有代码,外部不可引用
│ ├── handler/
│ ├── service/
│ └── repository/
├── pkg/ # 可导出的公共库
│ └── utils/
├── config/ # 配置文件
│ └── config.yaml
├── api/ # API定义(protobuf、swagger等)
├── scripts/ # 构建脚本
├── test/ # 集成测试
├── go.mod
├── go.sum
└── Makefile
这个结构有几个好处:
- cmd/ 放main函数,一个项目可以有多个入口(比如server和worker)
- internal/ 是Go语言特有的机制,里面的包只能被项目内部引用,外部无法导入
- pkg/ 放那些你愿意开放给外部使用的代码
2.4 初始化Go模块
创建好项目目录后,用一条命令初始化模块:
cd myproject
go mod init github.com/yourname/myproject
模块名通常用仓库地址,这样别人引用你的代码时直接 import 就行。如果是本地测试项目,也可以用 myproject 这样的名字。
执行后,目录下会生成 go.mod 文件。打开看看:
module github.com/yourname/myproject
go 1.21
就这么简单。以后你引入第三方库时,go get 会自动更新 go.mod 和 go.sum。
go get 或 go mod tidy 来管理依赖,别手贱。
2.5 第一个Go程序
好了,环境配好了,结构搭好了,该写代码了。在 cmd/server/main.go 里写下:
package main
import "fmt"
func main() {
fmt.Println("Hello, 消息队列实战!")
}
然后运行:
go run cmd/server/main.go
看到输出了吗?就这么简单。但别小看这个程序,它背后包含了Go的核心思想:
- 包管理:每个Go文件都必须属于一个包
- 入口函数:main包里的main函数是程序起点
- 简洁语法:没有分号,没有复杂的类继承
你想想看,一个语言能让你在5分钟内写出第一个可运行的程序,这本身就是一种设计哲学——少即是多。
2.6 常用命令速查
| 命令 | 作用 |
|---|---|
go run main.go |
直接运行,不生成二进制文件 |
go build |
编译生成可执行文件 |
go mod tidy |
清理无用依赖,添加缺失依赖 |
go get example.com/pkg |
下载并添加依赖 |
go test ./... |
运行所有测试 |