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 和商业场景。