Skip to content

Go 语言介绍 ​

Go(又称 Golang)是 Google 于 2009 年发布的开源编程语言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 设计。Go 的设计目标是兼顾开发效率和运行性能,原生支持并发编程,拥有简洁的语法和快速的编译速度,特别适合构建高并发的网络服务和分布式系统。

语言特性 ​

特性说明
简洁性语法精炼,关键字仅 25 个,学习曲线平缓
并发支持原生 goroutine + channel,轻松实现高并发
静态类型编译时类型检查,安全可靠
快速编译编译速度极快,大型项目秒级编译
垃圾回收自动内存管理,无需手动释放
跨平台支持 Linux / macOS / Windows 等多平台交叉编译
标准库丰富内置 HTTP、JSON、加密、测试等常用库
静态链接编译为单一二进制文件,部署极其简单

环境安装 ​

安装 Go ​

验证安装 ​

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,direct

Hello 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 框架
GORMORM 框架
Viper配置管理
Zap高性能日志库
CobraCLI 应用框架
Testify测试断言与 Mock
Wire依赖注入代码生成
gRPC-GogRPC 实现

标准库速览 ​

分类常用包
输入输出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 已支持泛型,但仍较克制)

系列文档 ​


作者:yanshaodong