golang从零实现
入门指南:
GitHub 地址→https://github.com/unknwon/the-way-to-go_ZH_CN
《Go 入门指南》这本开源书籍是一位 Golang 的布道者(无闻)苦于当时国内没有比较好的 Go 语言书籍,而着手翻译的一本国外书籍《The Way to Go》。该书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类来进行讲解。
该书将从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来开发 Web 应用这些高级概念和技巧。
阅读地址→https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
从零开始学 Go Web 编程:
GitHub 地址→https://github.com/astaxie/build-web-application-with-golang
《Go Web 编程》这本开源书籍,从零开始手把手教你 Go 的环境安装和配置、基本语法再到 Go Web 开发的方方面面。可谓是一书在手,“天下”(Go Web)任我行。当然书写得再好,也是“师傅领进门,修行靠个人啊!“
阅读地址→https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/SUMMARY.md
Go从零实现步骤
用 Go 分别写一个:Web 框架、分布式缓存、ORM 框架、RPC 框架的实战教程。有些东西看懂了,不一定会用,会用了也不一定能自己搞出来。所以从零写一个框架,了解其中的细节,才能算上真正懂了吧。
推荐先阅读 Go 语言简明教程,一篇文章了解Go的基本语法、并发编程,依赖管理等内容。
推荐 Go 语言笔试面试题,加深对 Go 语言的理解。
推荐 Go 语言高性能编程(项目地址),写出高性能的 Go 代码。
Go从零实现Web框架 - Gee
Gee 是一个模仿 gin 实现的 Web 框架,Go Gin简明教程可以快速入门。
- 第一天:前置知识(http.Handler接口) | Code
- 第二天:上下文设计(Context) | Code
- 第三天:Trie树路由(Router) | Code
- 第四天:分组控制(Group) | Code
- 第五天:中间件(Middleware) | Code
- 第六天:HTML模板(Template) | Code
- 第七天:错误恢复(Panic Recover) | Code
Go从零实现分布式缓存 GeeCache
GeeCache 是一个模仿 groupcache 实现的分布式缓存系统
- 第一天:LRU 缓存淘汰策略 | Code
- 第二天:单机并发缓存 | Code
- 第三天:HTTP 服务端 | Code
- 第四天:一致性哈希(Hash) | Code
- 第五天:分布式节点 | Code
- 第六天:防止缓存击穿 | Code
- 第七天:使用 Protobuf 通信 | Code
Go从零实现ORM框架 GeeORM
GeeORM 是一个模仿 gorm 和 xorm 的 ORM 框架
gorm 准备推出完全重写的 v2 版本(目前还在开发中),相对 gorm-v1 来说,xorm 的设计更容易理解,所以 geeorm 接口设计上主要参考了 xorm,一些细节实现上参考了 gorm。
- 第一天:database/sql 基础 | Code
- 第二天:对象表结构映射 | Code
- 第三天:记录新增和查询 | Code
- 第四天:链式操作与更新删除 | Code
- 第五天:实现钩子(Hooks) | Code
- 第六天:支持事务(Transaction) | Code
- 第七天:数据库迁移(Migrate) | Code
Go从零实现RPC框架 GeeRPC
GeeRPC 是一个基于 net/rpc 开发的 RPC 框架 GeeRPC 是基于 Go 语言标准库 net/rpc 实现的,添加了协议交换、服务注册与发现、负载均衡等功能,代码约 1k。
- 第一天 - 服务端与消息编码 | Code
- 第二天 - 支持并发与异步的客户端 | Code
- 第三天 - 服务注册(service register) | Code
- 第四天 - 超时处理(timeout) | Code
- 第五天 - 支持HTTP协议 | Code
- 第六天 - 负载均衡(load balance) | Code
- 第七天 - 服务发现与注册中心(registry) | Code
WebAssembly 使用示例
具体的实践过程记录在 Go WebAssembly 简明教程。
网络框架 - Gee
- 第 1 天 - http.处理程序接口基本代码
- 第 2 天 - 设计灵活的上下文代码
- 第 3 天 - 带有三棵树算法代码的路由器
- 第 4 天 - 组控制代码
- 第 5 天 - 中间件机制代码
- 第 6 天 - 嵌入式模板支持代码
- 第 7 天 - 恐慌恢复并使其健壮的代码
分布式缓存 - GeeCache
- 第 1 天 - LRU(最近最少使用)缓存策略代码
- 第 2 天 - 单机并发缓存代码
- 第 3 天 - 启动 HTTP 服务器代码
- 第 4 天 - 一致的哈希算法代码
- 第 5 天 - 分布式节点代码之间的通信
- 行程日 6 - 缓存细分和单次飞行 |Code
- 第 7 天 - 使用 Protobuf 作为 RPC 数据交换类型 |Code
对象关系映射 - GeeORM
Xorm 的设计比 gorm-v1 更容易理解,因此主要设计引用了 xorm,一些详细的实现引用了 gorm-v1。
- 第 1 天 - 数据库/sql 基础 |Code
- 第 2 天 - 对象扫描映射 |Code
- 第 3 天 - 插入和查询 |Code
- 第 4 天 - 连锁、删除和更新 |Code
- 第 5 天 - 支撑挂钩 |Code
- 第 6 天 - 支持交易 |Code
- 第 7 天 - 迁移数据库 |Code
RPC 框架 - GeeRPC
基于golang标准库,GeeRPC实现了更多的功能。例如,协议交换、服务注册和发现、负载平衡等。net/rpc
- 第 1 天 - 服务器消息编解码器 |Code
- 第 2 天 - 并发客户端 |Code
- 第 3 天 - 服务注册 |Code
- 第 4 天 - 超时处理 |Code
- 第 5 天 - 支持 HTTP 协议 |Code
- 第 6 天 - 负载平衡 |Code
- 第 7 天 - 发现和登记 |Code
Golang WebAssembly 演示
学习之路

资源
- 先决条件
- Go
- SQL
- 通用开发技能
- 学习GIT,在GitHub上建立一些仓库,与其它人分享你的代码
- 了解 HTTP(S) 协议,request 方法(GET, POST, PUT, PATCH, DELETE, OPTIONS)
- 不要害怕使用Google,Google 搜索的力量
- 看一些和数据结构以及算法有关的书籍
- 学习关于认证的基础实现
- 面向对象原则等等
- 命令行工具
- cobra
- urfave/cli
- 网页框架 + 路由
- Echo
- Beego
- Gin
- Revel
- Chi
- 数据库
- 关系型
- 云数据库
- 搜索引擎
- NoSQL
- 对象关系映射框架
- Gorm
- Xorm
- 高速缓存
- GCache
- 分布式缓存
- 日志
- 日志框架
- 日志管理系统
- 分布式追踪
- 实时通信
- Socket.IO
- API 客户端
- REST
- Gentleman
- GRequests
- heimdall
- GraphQL
- gqlgen
- graphql-go
- 最好知道
- 测试
- 任务调度
- 微服务
- 消息代理
- RabbitMQ
- Apache Kafka
- ActiveMQ
- Azure Service Bus
- 构建事件驱动型服务
- Watermill
- Message-Bus
- 框架
- GoKit
- go-zero
- Micro
- rpcx
- RPC
- Protocol Buffers
- gRPC-Go
- gRPC-Gateway
- Twirp
- Go-模式
Go 高级编程
GitHub 地址→https://github.com/chai2010/advanced-go-programming-book
《Go 语言高级编程》作为针对有一定 Go 基础的进阶书籍,内容涵盖并发、GOC 编程、Go 汇编语言、RPC 实现、Web 框架实现、分布式系统等高阶主题。该书的附录也是一大亮点,收录了 Go 有趣的代码片段、Go 常见坑。要想 Golang 玩得溜,得在 Go 高级编程下功夫 [手动狗头]
在线阅读→https://chai2010.cn/advanced-go-programming-book/
星图:starcharts
GitHub 地址→https://github.com/caarlos0/starcharts
这个项目是通过可视化的方式展示 GitHub 上 star 的增长曲线,也就生成是“星图”。推荐这个项目主要是运行简单和直观的数据可视化,可以快速地感受到 Go 开源项目带来的便利。我第一次玩这个项目的时候不会 Go 语言,但是参考这个项目写一个 Python 版本的星图,所以我想已经入门 Go 的各位肯定也能看懂。

有的小伙伴可能会说我没有开源项目、我的项目都没有 star 我学这个项目没用,我想了下确实是缺少些动力。如果抛开 GitHub 的 star 元素,还有一个适用更多场景的 Go 数据可视化项目:go-echarts。来吧,感受下数据的律动。

GitHub 地址→https://github.com/go-echarts/go-echarts
Chat 下:gochat
GitHub 地址→https://github.com/LockGit/gochat
gochat 是纯 Go 实现的轻量级即时通讯系统。技术上各层之间通过 RPC 通讯,使用 Redis 作为消息存储与投递的载体,相对 Kafka 操作起来更加方便快捷。各层之间基于 etcd 服务发现,在扩容部署时将会方便很多。架构、目录结构清晰,文档详细。而且还提供了 Docker 一键构建,安装运行都十分方便。

annie
GitHub 地址→https://github.com/iawia002/annie
Go 编写的下载快速、使用简单、程序纯净的视频下载工具。支持哔哩哔哩、YouTube 等视频网站。可作为前段时间被封禁:youtube-dl 的替代品(目前已重新上架),它真的很强大!先感受下 annie 带来的便利,可能就有兴趣去探究它的源码啦。
$ annie -c cookies.txt https://www.bilibili.com/video/av20203945/
Site: 哔哩哔哩 bilibili.com
Title: 【2021拜年祭单品】相遇day by day
Type: video
Stream:
[default] -------------------
Quality: 高清 1080P60
Size: 220.65 MiB (231363071 Bytes)
# download with: annie -f default "URL"
16.03 MiB / 220.65 MiB [==>----------------------------] 7.26% 9.65 MiB/s