主题
Go 语言介绍
Go(又称 Golang)是 Google 于 2009 年发布的开源编程语言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 设计。Go 的设计目标是兼顾开发效率和运行性能,原生支持并发编程,拥有简洁的语法和快速的编译速度,特别适合构建高并发的网络服务和分布式系统。
语言特性
| 特性 | 说明 |
|---|---|
| 简洁性 | 语法精炼,关键字仅 25 个,学习曲线平缓 |
| 并发支持 | 原生 goroutine + channel,轻松实现高并发 |
| 静态类型 | 编译时类型检查,安全可靠 |
| 快速编译 | 编译速度极快,大型项目秒级编译 |
| 垃圾回收 | 自动内存管理,无需手动释放 |
| 跨平台 | 支持 Linux / macOS / Windows 等多平台交叉编译 |
| 标准库丰富 | 内置 HTTP、JSON、加密、测试等常用库 |
| 静态链接 | 编译为单一二进制文件,部署极其简单 |
环境安装
安装 Go
- 官方下载:https://go.dev/dl/
- 推荐使用最新稳定版(1.22+)
验证安装
bash
go version
# go version go1.22.5 linux/amd64配置 GOPATH 与 GOPROXY
bash
# 查看环境变量
go env
# 官方公共代理(proxy.golang.org 为境外源)
go env -w GOPROXY=https://proxy.golang.org,direct
# 国内推荐(加速依赖下载):
# go env -w GOPROXY=https://goproxy.cn,directHello World
go
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}bash
go run main.go # 直接运行
go build # 编译为可执行文件工程结构
一个典型的 Go 项目(使用 Go Modules)结构如下:
myproject/
├── go.mod # 模块定义与依赖
├── go.sum # 依赖校验
├── cmd/ # 可执行程序入口
│ └── server/
│ └── main.go
├── internal/ # 内部包(仅本项目可见)
│ └── service/
├── pkg/ # 可复用的公共包
├── api/ # API 定义(protobuf / openapi)
├── configs/ # 配置文件
└── test/ # 额外的测试数据或集成测试约定:
internal/目录下的包只能被本项目导入,无法被外部模块引用,用于隐藏实现细节。
包管理(Go Modules)
bash
go mod init myproject # 初始化模块
go mod tidy # 整理依赖(添加缺失、移除无用)
go get github.com/xxx/xxx # 安装/升级依赖
go mod download # 下载依赖到本地缓存每个 Go 文件属于一个 package;package main 是程序入口。导出的标识符首字母大写,包内私有则首字母小写:
go
func PublicFunc() {} // 公开
func privateFunc() {} // 包内私有常用 CLI 命令
bash
go version # 查看版本
go run main.go # 直接运行
go build # 编译为可执行文件
go install # 编译并安装到 GOPATH/bin
go test ./... # 运行所有测试
go test -v -cover # 详细输出 + 覆盖率
go fmt ./... # 格式化代码
go vet ./... # 静态分析
go mod tidy # 整理模块依赖
go env # 查看 Go 环境变量
# 交叉编译示例
GOOS=linux GOARCH=amd64 go build # 编译 Linux 版本
GOOS=windows GOARCH=amd64 go build # 编译 Windows 版本常用第三方库
| 库 | 用途 |
|---|---|
| Gin | 高性能 HTTP Web 框架 |
| Echo | 极简高性能 Web 框架 |
| GORM | ORM 框架 |
| Viper | 配置管理 |
| Zap | 高性能日志库 |
| Cobra | CLI 应用框架 |
| Testify | 测试断言与 Mock |
| Wire | 依赖注入代码生成 |
| gRPC-Go | gRPC 实现 |
标准库速览
| 分类 | 常用包 |
|---|---|
| 输入输出 | fmt、io、os、bufio、path/filepath |
| 网络 | net、net/http、net/url |
| 编码 | encoding/json、encoding/xml、encoding/csv |
| 加密 | crypto、crypto/tls |
| 并发 | sync、context、sync/atomic |
| 测试 | testing、net/http/httptest |
| 时间 | time |
| 字符串 | strings、strconv、regexp |
| 数据库 | database/sql |
适用场景
- 微服务 / API 网关:编译为单一二进制文件,部署极简,内存占用低
- 云原生基础设施:Docker、Kubernetes、Prometheus 等均用 Go 编写
- CLI 工具:跨平台编译,分发方便
- 高并发网络服务:goroutine 轻量级并发,轻松支撑百万连接
- 区块链:以太坊 geth、Hyperledger Fabric 等
- DevOps 工具:Terraform、Consul、etcd 等
不适用场景
- 复杂的 GUI 桌面应用
- 嵌入式系统(资源极端受限场景)
- 对泛型有深度依赖的场景(Go 1.18 已支持泛型,但仍较克制)
系列文档
- Go 语法基础 — 变量、数据类型、流程控制、函数
- Go 结构体与接口 — struct、方法、隐式接口、类型断言
- Go 并发编程 — goroutine、channel、sync、context
- Go 错误处理 — error 值语义、包装、panic/recover
- Go 标准库速览 — 常用标准库分类与示例
作者:yanshaodong