前言

哈喽,大家好,我是asong。最近总有读者问我有没有Go语言方向优质的开源项目,可以写在简历上那种,一时还真想不起来,花了两天时间调研了一下,针对有无工作经验的分别推荐几个开源项目,下面我们一起来看一下。

无工作经验

对于还在上学的朋友们,除了知道必要的基础知识外,也要有1-2个拿的出手的项目,光有基础,没有实践,很难过去简历这一关,对于学生而言,简单的crud还是要熟练掌握的,接下来就推荐几个文档比较齐全的web项目,入门后可以在此基础上深度开发。

bbs-go

bbs-go是一个使用Go语言搭建的开源社区系统,后端使用技术栈:

  • iris (https://github.com/kataras/iris) Go 语言 mvc 框架
  • gorm (http://gorm.io/) Go 语言 orm 框架
  • Nuxt.js (https://nuxtjs.org/) 基于Vue.js的服务端页面渲染框架,简单、好用、功能强大
  • resty (https://github.com/go-resty/resty) Go 语言好用的 http-client
  • cron (https://github.com/robfig/cron) 定时任务
  • goquery (https://github.com/PuerkitoBio/goquery) html dom 元素解析

还有配套的前端项目,基于Vue搭建的,功能还是比较全面的,通过这个项目可以了解开发一个开源社区的设计思路,对于一个新手入门web开发还是很友好的,但是这个项目需要付费才能观看搭建文档,不过代码是开源的,大家可以把源码下载下来自己研究一下,代码内容不多且简洁,自己深耕几天应该可以掌握。

项目地址:https://gitee.com/mlogclub/bbs-go

Gin-vue-admin

这个项目在Go语言领域还是很出名的,Gin-vue-admin是一个基于 vue 和 gin 开发的全栈前后端分离的开发基础平台,集成jwt鉴权,动态路由,动态菜单,casbin鉴权,表单生成器,代码生成器等功能,提供多种示例文件,还配有完整的文档教程和视频教程。这个项目个人觉得是新手入门必看项目,跟着做一遍后基本的crud就都掌握了,其中分片长传、代码生成器的功能还是挺有借鉴意义的,可以深入了解一下。这个项目不需要介绍太多,文档比较详细,可以达到手把手入门的程度。

项目地址:https://github.com/flipped-aurora/gin-vue-admin

rpcx

现在企业都是由单体应用向微服务架构转型,微服务的实践离不开RPC框架的应用,目前服务治理型的RPC 框架有dubbo-gogo-zerogo-kit 等,跨语言调用型的 RPC 框架有 ThriftgRPCHessianFinaglerpcx 等,对于一个小白而言理解RPC的原理比较重要,所以可以先从rpcx框架入手,rpcx 是一个分布式的Go语言的RPC框架,支持Zookepperetcdconsul多种服务发现方式,多种服务路由方式, 是目前性能最好的 RPC 框架之一,rpcx的文档比较齐全,有专门的团队维护,是新手入门的不二选择。

项目地址:https://github.com/smallnest/rpcx

文档地址:https://doc.rpcx.io/

go-kit

大家可以关注一下go-kit这个微服务项目,基于go-kit可以快速构建健壮、可靠、可维护的微服务,go-kit提供了对consul、etcd、zookeeper、eureka等注册中心的支持,有一位大佬开源了一份go-kit微服务实践教程:

  • 观看这个系列的博客:
  • 源码地址在这里:https://github.com/hwholiday/learning_tools/tree/master/go-kit
  • go-kit自动生成代码的命令行工具:https://github.com/kujtimiihoxha/kit

项目地址:https://github.com/go-kit/kit

有工作经验

已经有工作经验的朋友们就可以不用看一些基础的项目和原理了,可以更多的关注项目的架构设计、性能优化、服务治理等,更多的去思考如何维护好一个项目,这其实并不需要来看开源框架,更多关注自己项目团队的框架,从中找出优缺点去做优化,更加体现自己的价值。如果自己项目团队的框架比较水的话,那么下面就推荐几个优秀的开源项目供你学习借鉴。

zinx

zinx是一个基于Go语言开发的TCP长连接服务器框架,其可以应用在游戏领域或其他长连接领域;我们可以学习zinx框架的设计思路,他有完整的视频教程和文档,通过这个我们可以完全理解如何设计一个轻量级并发服务器,然后自己基于zinx自己写一个,并做一些优化,写在简历上岂不是可以吹一吹!!!

项目地址:https://github.com/aceld/zinx

文档地址:https://www.kancloud.cn/aceld/zinx

视频地址:https://www.bilibili.com/video/av71067087

go-zero

对于大多数朋友一进入公司就开始了crud,使用的web框架、rpc框架也都是企业已经搭建好的,直接就拿来用了,很少有机会参与到如何设计一个web框架、rpc框架之中,但是面试中面试官还爱考查这些东西,所以就需要我们平常多关注如何设计一款高性能的企业框架,go-zero就一款企业框架,我们可以从中学习到值得借鉴的的设计;go-zero集成了webrpc框架,是在20年由好未来开源的一款微服务框架,由于go-zero项目还是比较大的,建议大家带着目的性去学习,比如我想了解微服务注册与发现的原理实现、自适应负载均衡算法原理与实现,这样我们就可以带着目的性去查阅源码,总结学习文档并把它摘要出来形成自己的东西,写在简历上吹吹水他不香嘛!!!

go-zero的文档体系还不是很完善,一些知识点的学习还需要大家自己去总结提炼。

项目地址:https://github.com/zeromicro/go-zero/blob/master/readme-cn.md

go-nsq

NSQ是一个基于Go语言的分布式实时消息平台,可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。他的强大就不必多说了,我推荐这个项目的原因是让大家去学习nsq是如何设计的,使用起来是简单的,但是如何设计才是重点,面试中如果让你设计一个高性能的实时消息平台,你知道该如何设计吗?

项目地址:https://github.com/nsqio/go-nsq

学习地址:https://cloud.tencent.com/developer/article/1735996

Tidb

TidbNewSQL行业中的代表性产品,由PingCAP公司自主设计、研发的开源分布式关系型数据库,兼容MySQL 5.7 协议和 MySQL 生态等重要特性。目前很多公司都在使用Tidb,解决了关系型数据库、弹性扩展以及全球分布的问题。Tidb采用Go语言开发SQL层,下边的分布式存储引擎使用rust语言,使用Tidb具有以下优势:

  • 支持弹性的扩缩容;
  • 支持 SQL,兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL;
  • 默认支持高可用,自动进行数据修复和故障转移;
  • 支持 ACID 事务;

如果大家熟悉Tidb的设计与实现,可以写到简历上,和面试官吹吹水!!!

项目地址:https://github.com/pingcap/tidb

文档地址:https://docs.pingcap.com/zh/tidb/stable

kubernetes

一提到云原生就提不开kubernetes,现在各个企业都在上云原生,那么我们每个人都要理解kubernetes,即使你是一名业务开发,不会一点kubernetes都不太好意思出去面试,这是一个必备技能。Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统;Kubernetes由于是Go语言编写,我们可以从源码开始学习,配合着官方文档,仔细专研一番,找个kubernetes相关的工作不久起飞了,现在很多做kubernetes方向的朋友也都是由业务开发转去的,朋友们还不赶快学习来!!!

项目地址:https://github.com/kubernetes/kubernetes

官网文档:https://kubernetes.io/docs/home/

中文文档:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/

推荐看英文文档,中文文档有些地方翻译过来有点难理解。

Prometheus

PrometheusCloud Native Computing Foundation 的一个项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并可以在观察到指定条件时触发警报。现在企业基本都使用Prometheus做监控上报,但是你知道他的工作原理是怎样的吗?已经工作的朋友不要只停留在使用阶段了,其核心原理我们还是要花点时间研究一下的,一样可以在面试中和面试官吹水。

项目地址:https://github.com/prometheus/prometheus

文档地址:https://prometheus.io/blog/

总结

本文我们针对有无工作经验的朋友们推荐了几个优质的开源项目,有些项目已经广泛在企业中应用,其实现原理需要我们深究,真正做到知其所以然,才能做到和面试官的侃侃而谈。