Skip to content

Go 知识地图

Go 文档要按“语法简单、原理不简单”的方式补齐。Go 的变量、切片、map、接口、goroutine、channel、context 和错误处理都很常用,但如果只看表面语法,项目里很容易踩坑。

学习路线

mermaid
flowchart TD
    A["环境和 Go Modules"] --> B["变量、常量和基础类型"]
    B --> C["流程控制和函数"]
    C --> D["数组、切片、map 和结构体"]
    D --> E["接口、方法和组合"]
    E --> F["goroutine、channel 和调度"]
    F --> G["context、错误处理和测试"]
    G --> H["Web API、项目结构和性能排查"]

每个模块必须补什么

模块必讲原理必备 Demo
环境配置GOROOT、GOPATH、Go Modules、代理、版本管理创建 module、引入依赖
变量常量短变量声明、零值、作用域、iota业务状态常量
数据类型整数、浮点、字符串、rune、指针、数组、切片、map切片扩容、map 统计
流程控制if、for、switch、defer、panic、recoverdefer 执行顺序
函数多返回值、闭包、函数类型、方法策略函数、错误返回
结构体接口值接收者、指针接收者、接口动态类型支付接口和实现
并发goroutine、channel、select、调度、内存模型生产者消费者
context取消、超时、值传递、请求链路HTTP 请求超时控制
错误处理error、errors.Is/As、wrap、哨兵错误业务错误包装
测试testing、table test、benchmark、mock服务函数单测
Web APInet/http、路由、中间件、JSON、参数校验最小 REST API
项目实践分层、配置、日志、优雅关闭可运行后端项目骨架

Go 原理重点

mermaid
flowchart TD
    A["Go 程序"] --> B["编译成本地二进制"]
    B --> C["goroutine 创建"]
    C --> D["GMP 调度模型"]
    D --> E["channel 通信"]
    E --> F["context 控制取消和超时"]

重点要讲清:

  1. 切片是结构体,包含指针、长度、容量。
  2. append 可能触发扩容,旧切片和新切片可能指向不同底层数组。
  3. map 不是并发安全的,多 goroutine 写需要锁或 sync.Map
  4. 接口值包含动态类型和动态值,nil 接口问题要单独讲。
  5. channel 不是队列万能替代品,要理解阻塞、关闭和 select。
  6. context 用来传递取消信号和截止时间,不要滥用它传业务参数。

商业场景要求

Go 文档 Demo 要优先覆盖:

场景需要覆盖
HTTP API路由、中间件、JSON、错误响应
并发任务worker pool、channel、context 取消
微服务客户端超时、重试、日志、指标
命令行工具参数解析、配置、退出码
性能排查benchmark、pprof、内存分配

面试闭环

Go 面试页要能回答:

  1. slice 和 array 区别。
  2. slice 扩容规则和共享底层数组问题。
  3. map 为什么不是并发安全。
  4. interface nil 坑。
  5. 值接收者和指针接收者区别。
  6. goroutine 泄漏如何发生。
  7. channel 关闭原则。
  8. select 如何工作。
  9. context 为什么重要。
  10. GMP 调度模型是什么。

本章小结

Go 文档要避免只停留在“语法简洁”。真正的重点是切片、map、接口、goroutine、channel、context、错误处理和工程结构。每个点都要有原理图、可运行 Demo 和商业场景。