泻药,鹅厂Go后端工程师路过

首先我表示,go语言的练手项目不应该是K8s、Docker这种,K8s现有代码接近50万行!!这怎么练手?????蹭流量也不应该这么不负责任吧

我还是推荐一些500行至3000行的项目用来练手,比如极客兔兔那个系列就是很好的例子!

同时,作者推出一个tiny系列:tinyrpc、tinybalancer、tinyweb等。每个系列的代码约1千行左右,可以帮助gopher深入学习go语言,之后会陆续发链接和地址

TinyRPC

TinyRPC 是基于Go语言标准库 net/rpc 扩展的远程过程调用框架,它具有以下特性:

  • 基于TCP传输层协议
  • 支持多种压缩格式:gzip、snappy、zlib;
  • 基于二进制的 Protocol Buffer 序列化协议:具有协议编码小及高扩展性和跨平台性;
  • 支持生成工具:TinyRPC提供的 protoc-gen-tinyrpc 插件可以帮助开发者快速定义自己的服务;

TinyRPC 的源代码仅有一千行左右,通过学习 TinyRPC ,开发者可以得到以下收获:

  • 代码简洁规范
  • 涵盖大多数 Go 语言基础用法和高级特性
  • 单元测试编写技巧
  • TCP流中处理数据包的技巧
  • RPC框架的设计理念

TinyBalancer

TinyBalancer 是基于Go语言标准库 net/http/httputil 扩展的反向代理负载均衡器,它支持以下特性:

  • 支持http以及https协议
  • 支持七种负载均衡算法,分别是:round-robin、random、power of 2 random choice、consistent hash、consistent hash with bounded、ip-hash、least-load。
  • 支持心跳检测,故障恢复

TinyBalancer 的源代码仅有一千行左右,通过学习 TinyBalancer ,开发者可以得到以下收获:

  • 深入理解负载均衡算法
  • 代码简洁规范
  • 用Go语言设计反向代理的技巧
  • 单元测试编写技巧
  • 工厂设计模式在go语言中的应用

TinyWeb(开发中,后续会更新)


除了开源项目,作者对Go语言进阶的同学有以下一些小指点!

单元测试(重点在用,有兴趣看看源码,很短)

作为一名合格的开发者,当然少不了单元测试的编写,一般在工作中,对Go语言代码进行单元测试时通常会使用的两个框架:

Go语言断言库:

Go语言接口测试库:

这两个库会在工作中经常遇到!对单元测试很重要!重要的话说三遍!!!


HTTP

Go语言本身提供的标准库非常强大!通过标准库也可以写出优美的Restful接口。官方推荐的web学习教程:Learn Web Programming in Go by Examples,很短很短,一个小时就能看完

其中这个教程中的路由、Session会话相关的库选择了Google开发的

,这两个库都非常迷你精巧,也符合Go语言的初衷。

(重点在用,有兴趣看看源码,mux和sessions的源码都在一两千行左右)

关系型数据库(会用即可)

如果开发者在实际开发过程中,比较喜欢写纯SQL语句或者对性能敏感度较高的话,作者建议选择sqlx库,这个库对Go语言标准库中的sql进行了二次封装。

如果比较喜欢使用ORM框架,作者推荐选择GORM库。

gorm的文章非常详细,有兴趣的可以看看:GORM Guides。


RPC(会用即可)

这时,你还想学点微服务相关的,首先强烈推荐grpc-go!!gRPC

grpc是google推出的,基于http2.0和protocol buffer协议的远程过程调用框架

其次,有兴趣的话你可以看看它的生态,https://github.com/grpc-ecosystem ,这个生态合辑包含监控、限流、日志等等,堪比哆啦A梦的小肚兜!!

序列化协议(有兴趣可以看看Protocol buffer的编码原理)

关于序列化协议,web常用的文本序列化协议就是JSON了,二进制序列化协议多数为Protocol buffer

Protocol buffer的指南:Language Guide (proto3)


Go语言代码规也是非常非常重要的东西!!!!

uber的Go语言的代码规范:uber-go/guide,至今是很多Go语言开发团队的典范!强烈推荐熟读一遍

中文翻译版:uber_go_guide_cn

深入原理(不喜欢八股文的可以跳过)

如果你想面试来BAT上班,除了后端必备的东西,Go语言的八股文给大家来一打!!

敲重点!!!!!


如果想收藏的同时点个赞喔~