字节笔记本

2026年3月22日

7天用Go从零实现系列项目

本文介绍 7days-golang,一个由 geektutu 维护的 Go 语言从零实现系列教程。该项目在 GitHub 上已获得 16.6k stars,通过 7 天时间分别实现了 Web 框架 Gee、分布式缓存 GeeCache、ORM 框架 GeeORM 和 RPC 框架 GeeRPC 四个核心项目,是学习 Go 语言底层原理的优秀实践教程。

项目简介

7days-golang 是一个 Go 语言进阶学习项目,旨在通过从零实现常见基础设施组件,帮助开发者深入理解 Go 语言的特性和后端系统的核心设计。项目使用纯 Go 编写(99.1%),采用 MIT 开源协议,目前已有 2.6k forks。

项目包含四个独立的子项目,每个项目都通过 7 天的渐进式开发完成,从基础概念到完整实现,适合有一定 Go 语言基础的开发者进阶学习。

四大子项目

1. Gee — Web 框架

Gee 是一个模仿 gin 实现的 Web 框架,覆盖了 Web 框架的核心设计要素:

天数主题核心内容
Day 1前置知识http.Handler 接口
Day 2上下文设计Context 封装
Day 3Trie 树路由高效路由匹配
Day 4分组控制路由分组
Day 5中间件中间件机制
Day 6HTML 模板模板渲染
Day 7错误恢复Panic Recover

核心亮点

  • 基于 Trie 树实现高效路由匹配,支持动态参数
  • 灵活的中间件机制,支持全局和分组级别中间件
  • 完善的分组控制,类似 gin 的 Group 用法

2. GeeCache — 分布式缓存

GeeCache 是一个模仿 groupcache 实现的分布式缓存系统,涵盖分布式系统的核心问题:

天数主题核心内容
Day 1LRU 缓存缓存淘汰策略
Day 2单机并发缓存并发安全
Day 3HTTP 服务端网络通信
Day 4一致性哈希节点分片
Day 5分布式节点节点通信
Day 6防止缓存击穿singleflight
Day 7Protobuf高效序列化

核心亮点

  • 使用一致性哈希算法解决节点分片问题
  • singleflight 防止缓存击穿
  • Protobuf 作为节点间通信协议

3. GeeORM — ORM 框架

GeeORM 是一个参考 gorm 和 xorm 设计的 ORM 框架:

天数主题核心内容
Day 1database/sql基础接口
Day 2对象表结构映射Schema 映射
Day 3记录新增和查询CRUD 基础
Day 4链式操作链式调用
Day 5钩子 Hooks生命周期回调
Day 6事务支持Transaction
Day 7数据库迁移Migrate

核心亮点

  • 结构体标签自动映射表结构
  • 支持链式查询、更新、删除
  • 钩子机制支持 BeforeInsert/AfterInsert 等回调
  • 内置数据库迁移功能

4. GeeRPC — RPC 框架

GeeRPC 是基于 net/rpc 扩展的 RPC 框架,代码约 1000 行:

天数主题核心内容
Day 1消息编解码协议设计
Day 2并发客户端异步调用
Day 3服务注册Service Register
Day 4超时处理Timeout
Day 5HTTP 协议多协议支持
Day 6负载均衡Load Balance
Day 7服务发现Registry

核心亮点

  • 自定义消息编解码协议
  • 支持并发和异步的客户端调用
  • 内置服务注册与发现机制
  • 支持多种负载均衡策略

技术栈

  • Go — 主要开发语言,利用 goroutine、channel、interface 等特性
  • net/http — HTTP 服务端实现
  • database/sql — 数据库操作抽象
  • net/rpc — RPC 基础设施
  • encoding/json / protobuf — 序列化协议
  • sync — 并发原语(Mutex、RWMutex、WaitGroup)

快速开始

bash
# 克隆仓库
git clone https://github.com/geektutu/7days-golang.git

# 进入子项目目录,例如 Gee Web 框架
cd 7days-golang/gee-web

# 按 day 顺序阅读和运行代码
# 每个 day 对应一个独立的代码目录

适用人群

人群适用程度
Go 初学者需要先学习 Go 基础语法
有一定基础的开发者非常适合,通过实践深入理解
想了解框架原理的开发者最佳选择,代码简洁清晰
准备面试的开发者适合,涵盖常见面试知识点

学习建议

  1. 按顺序学习:每个子项目从 Day 1 开始,循序渐进
  2. 动手实践:不要只看代码,跟着教程一步步实现
  3. 对比源码:将 Gee 与 gin、GeeCache 与 groupcache 对比学习
  4. 深入思考:每篇文章末尾有思考题,建议认真完成

项目链接

分享: