文章

Go 开发完整学习指南

Go 开发完整学习指南

面向有编程基础的工程师,系统覆盖 Go 项目工程化、核心语言特性、标准库全量参考、生产级实践。

学习路线图

阶段一:工程化基础(1-2周)
  ├── 模块与包管理(go mod)
  ├── 项目目录结构规范
  ├── 构建工具链(go build/test/install/compile)
  └── 测试体系(单元测试/基准测试/模糊测试)

阶段二:核心语言特性(2-3周)
  ├── 类型系统(值类型/引用类型/指针/结构体)
  ├── 并发模型(goroutine/channel/select)
  ├── 错误处理(error/panic/recover/wrap)
  ├── 接口与反射(interface/reflect/type assertion)
  └── 泛型(type parameters/constraints)

阶段三:标准库精读(4-6周)
  ├── IO 与文件系统(os/io/bufio/path/filepath)
  ├── 字符串与文本(strings/strconv/regexp/bytes/template)
  ├── 编码与序列化(json/xml/csv/binary/gob)
  ├── 并发原语(sync/context/atomic)
  ├── 网络编程(net/net/http/net/url)
  ├── HTTP 服务端(net/http 全栈)
  ├── 时间处理(time)
  ├── 数学计算(math/math/big/math/rand)
  ├── 加密与安全(crypto/*)
  ├── 运行时与调试(runtime/pprof/trace)
  ├── 操作系统交互(os/exec/signal/syscall)
  ├── 日志体系(log/log/slog/errors)
  ├── 排序与集合(sort/container/*)
  ├── Go AST 与工具链(go/*)
  └── 测试框架(testing/*)

阶段四:生产级实践(持续)
  ├── 项目布局最佳实践
  ├── 配置管理(viper/envconfig/自研)
  ├── 依赖注入(wire/fx/手写)
  ├── 可观测性(日志/指标/链路追踪)
  └── 性能优化与调优

标准库分类总览

分类包路径核心用途优先级
IO 基础io io/fsReader/Writer 抽象接口P0
文件系统os path/filepath文件操作、环境变量、进程P0
缓冲 IObufio带缓冲的读写 ScannerP0
字符串strings strconv字符串操作与类型转换P0
字节切片bytes可变字节缓冲操作P0
格式化fmt格式化 I/OP0
错误处理errors错误创建与包装P0
日志log log/slog结构化日志P0
时间time时间解析、定时器、格式化P0
并发原语sync sync/atomic互斥锁、原子操作、WaitGroupP0
上下文context超时控制、取消传播、值传递P0
JSONencoding/jsonJSON 序列化/反序列化P0
HTTPnet/httpHTTP 客户端与服务端P0
网络net net/urlTCP/UDP/Unix SocketP1
正则regexp正则表达式匹配P1
模板text/template html/template模板渲染P1
编码encoding/xml encoding/csv encoding/binary其他编码格式P1
加密哈希crypto/sha256 crypto/hmac crypto/aes哈希、对称加密P1
TLScrypto/tls crypto/x509传输层安全P1
数学math math/big math/rand数学运算与大数P1
反射reflect运行时类型检查P2
运行时runtime runtime/debug runtime/pprofGC、goroutine、性能分析P2
系统调用os/exec os/signal syscall进程执行、信号处理P2
排序sort排序与搜索P1
容器container/list container/heap container/ring链表/堆/环P2
压缩compress/gzip compress/zlib archive/tar archive/zip压缩与归档P2
Go ASTgo/ast go/parser go/token go/format源码分析与代码生成P3
测试testing testing/fstest testing/quick测试框架P1
不安全unsafe底层内存操作P3

目录结构

go-dev-guide/
├── 00-概述与学习路径.md          ← 你在这里
├── 01-工程化/
│   ├── 01-模块与包管理.md
│   ├── 02-项目目录结构.md
│   ├── 03-构建工具链.md
│   └── 04-测试体系.md
├── 02-语言特性/
│   ├── 01-类型系统.md
│   ├── 02-并发模型.md
│   ├── 03-错误处理.md
│   ├── 04-接口与反射.md
│   └── 05-泛型.md
├── 03-标准库/
│   ├── 01-IO与文件系统.md
│   ├── 02-字符串与文本处理.md
│   ├── 03-编码与序列化.md
│   ├── 04-并发原语.md
│   ├── 05-网络编程.md
│   ├── 06-HTTP服务.md
│   ├── 07-时间处理.md
│   ├── 08-数学计算.md
│   ├── 09-加密与安全.md
│   ├── 10-运行时与调试.md
│   ├── 11-操作系统交互.md
│   ├── 12-日志与错误.md
│   ├── 13-排序与集合.md
│   ├── 14-Go-AST与工具链.md
│   └── 15-测试框架.md
└── 04-生产实践/
    ├── 01-项目布局最佳实践.md
    ├── 02-配置管理.md
    ├── 03-依赖注入.md
    └── 04-可观测性.md

学习建议

  1. P0 标准库优先fmt/os/strings/errors/sync/context/net/http/encoding/json 这 8 个包覆盖了日常 80% 的场景
  2. 边学边写:每个包学完写一个小 demo,不要只看不练
  3. 读源码:标准库源码是最好的 Go 教材,从 strings 包开始读(代码量小、质量高)
  4. 对标你的项目:care-mate 项目(Go 后端 + SkyWalking)就是最好的练手场
  5. 并发是核心:Go 的并发模型是它区别于其他语言的最大优势,花足够时间在 goroutine/channel/select/context