泻药,鹅厂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语言的八股文给大家来一打!!
敲重点!!!!!
如果想收藏的同时点个赞喔~