7 days golang programs from scratch (web framework Gee, distributed cache GeeCache, object relational mapping ORM framework GeeORM, rpc framework GeeRPC etc) 7天用Go动手写/从零实现系列
7 days golang programs from scratch
7天能写什么呢?类似 gin 的 web 框架?类似 groupcache 的分布式缓存?或者一个简单的 Python 解释器?希望这个仓库能给你答案。 推荐先阅读 Go 语言简明教程,一篇文章了解Go的基本语法、并发编程,依赖管理等内容。 推荐 Go 语言笔试面试题,加深对 Go 语言的理解。 推荐 Go 语言高性能编程(项目地址),写出高性能的 Go 代码。 Gee 是一个模仿 gin 实现的 Web 框架,Go Gin简明教程可以快速入门。 GeeCache 是一个模仿 groupcache 实现的分布式缓存系统 GeeORM 是一个模仿 gorm 和 xorm 的 ORM 框架 gorm 准备推出完全重写的 v2 版本(目前还在开发中),相对 gorm-v1 来说,xorm 的设计更容易理解,所以 geeorm 接口设计上主要参考了 xorm,一些细节实现上参考了 gorm。 GeeRPC 是一个基于 net/rpc 开发的 RPC 框架 GeeRPC 是基于 Go 语言标准库 具体的实践过程记录在 Go WebAssembly 简明教程。README 中文版本
7天用Go从零实现系列
7天用Go从零实现Web框架 - Gee
7天用Go从零实现分布式缓存 GeeCache
7天用Go从零实现ORM框架 GeeORM
7天用Go从零实现RPC框架 GeeRPC
net/rpc 实现的,添加了协议交换、服务注册与发现、负载均衡等功能,代码约 1k。WebAssembly 使用示例
What can be accomplished in 7 days? A gin-like web framework? A distributed cache like groupcache? Or a simple Python interpreter? Hope this repo can give you the answer.
Web Framework - Gee
- Day 1 - http.Handler Interface Basic Code
- Day 2 - Design a Flexiable Context Code
- Day 3 - Router with Trie-Tree Algorithm Code
- Day 4 - Group Control Code
- Day 5 - Middleware Mechanism Code
- Day 6 - Embeded Template Support Code
- Day 7 - Panic Recover & Make it Robust Code
Distributed Cache - GeeCache
GeeCache is a groupcache-like distributed cache
- Day 1 - LRU (Least Recently Used) Caching Strategy Code
- Day 2 - Single Machine Concurrent Cache Code
- Day 3 - Launch a HTTP Server Code
- Day 4 - Consistent Hash Algorithm Code
- Day 5 - Communication between Distributed Nodes Code
- Day 6 - Cache Breakdown & Single Flight | Code
- Day 7 - Use Protobuf as RPC Data Exchange Type | Code
Object Relational Mapping - GeeORM
GeeORM is a gorm-like and xorm-like object relational mapping library
Xorm's desgin is easier to understand than gorm-v1, so the main designs references xorm and some detailed implementions references gorm-v1.
- Day 1 - database/sql Basic | Code
- Day 2 - Object Schame Mapping | Code
- Day 3 - Insert and Query | Code
- Day 4 - Chain, Delete and Update | Code
- Day 5 - Support Hooks | Code
- Day 6 - Support Transaction | Code
- Day 7 - Migrate Database | Code
RPC Framework - GeeRPC
GeeRPC is a net/rpc-like RPC framework
Based on golang standard library net/rpc, GeeRPC implements more features. eg, protocol exchange, service registration and discovery, load balance, etc.
- Day 1 - Server Message Codec | Code
- Day 2 - Concurrent Client | Code
- Day 3 - Service Register | Code
- Day 4 - Timeout Processing | Code
- Day 5 - Support HTTP Protocol | Code
- Day 6 - Load Balance | Code
- Day 7 - Discovery and Registry | Code