如今已经狂奔了10年, Google的Go编程语言无疑已经名声大噪。 Go轻巧且易于编译,由于其慷慨的库和抽象简化了并发和分布式(读取:云)应用程序的开发,引起了广泛的兴趣。
但是,任何编程语言成功的真正衡量标准都是开发人员使用它创建的项目。 Go已证明自己是快速开发网络服务,软件基础结构项目以及各种紧凑而强大的工具的首选。
这里有10个用Go语言编写的值得关注的项目,其中许多项目已经比其编写的语言更出名。所有这些项目在各自的领域都发挥了重要作用。 此处介绍的所有项目都托管在GitHub上,因此Go-Curious可以轻松查看使它们打勾的Go代码。
码头工人
与Docker相比,您很难为Go找到更好的成功案例。 在一年多的时间里,这种软件容器化技术成为Go适用于大规模分布式软件项目的典型代表。 Docker团队之所以喜欢Go,是因为它提供了很多好处:无需依赖项的静态编译,强大的标准库,完整的开发环境以及能够以最小的麻烦为多种架构进行构建的能力。
Kubernetes
如果Docker是用Go编写的,则可以推断其他重要的面向云的容器项目也将用Go编写。 Kubernetes ,谷歌的容器编排项目,是一个围棋项目,因为是大多数Kubernetes子和生态系统。 一个很好的例子:超轻量级的Kubernetes衍生产品k3s ,只需要Kubernetes的基础知识,而又不需要更多的知识。
Google考虑使用其他语言(包括C / C ++,Java和Python)编写Kubernetes。 但是据 Kubernetes的联合创始人,前技术负责人,现为VMware的首席工程师Joe Beda称 ,这些语言都没有像Go那样成为“最佳选择”。 正如Beda所说,“前进既不是太高也不是太低”。
Fedora CoreOS
CoreOS (现在是Red Hat项目)使用Docker将Linux变成一群松散耦合的容器,这可能成为摆脱混乱的依赖关系(可能已成为Linux软件包管理的必要条件)的一条可能之路。 因此,毫不奇怪,CoreOS利用Docker来实现这一魔力-并且CoreOS的两个基本服务Etcd和Fleet都是用Go编写的。 通过Fleet ,您可以“对CoreOS群集进行处理,就好像它共享一个初始化系统一样。” Etcd是一个分布式键值存储 ,用于处理Docker应用程序和CoreOS实例之间的设置同步。 由于Go具有“出色的跨平台支持,小的二进制文件以及其背后的强大社区”,因此两者都是用Go编写的。
InfluxDB
InfluxDB是“没有外部依赖性的分布式时间序列数据库”。 术语“时间序列”表示InfluxDB主要涉及获取指标或事件,并允许对其进行实时分析。 “无外部依赖关系”意味着您不需要其他软件即可使用InfluxDB。 它是完全独立的(就像Go应用程序倾向于那样)。 可以通过提交JSON的REST调用将数据写入数据库或从数据库中读取数据,并且可以通过甚至允许使用正则表达式的简单SQL语言进行查询。 InfluxDB具有高度的弹性和水平可扩展性,很可能选择Go作为使这些功能变得容易和容易的语言。
伊斯蒂奥
Istio项目是Kubernetes的一部分,它解决了一个在许多企业应用程序环境中都难以理解和处理的问题:您如何处理将服务相互连接并与外界连接的网络结构? Istio在Kubernetes集群中的每个容器之间以及这些容器与外部世界之间提供了可编程的“服务网格”或网络代理层,因此可以通过共享控制平面以编程方式对该网络进行任何更改。 鉴于Kubernetes也是用Go编写的,因此Go非常适合此操作,这也是因为Go适用于分散式,分布式网络项目。
特拉菲克
用Go编写的另一个与网络有关的项目是Traefik ,它是网络服务的反向代理和负载平衡器。 Traefik旨在与广泛的编排选项一起使用,从Kubernetes和Docker Swarm到Amazon ECS和Azure Service Fabric。 Traefik自动创建在这些协调器下运行的微服务所需的与外界对话的路由。 它还会生成适合您的协调器的跟踪数据和统计信息。
雨果
静态站点生成器现在非常流行。 毕竟,它们提供了仅使用静态HTML,CSS和JavaScript即可快速便捷地创建快速,安全的网站的方法。 Hugo是一个静态站点生成器,它利用Go的许多功能Swift而平稳地工作,即Go的呈现HTML的工具,其网络库,其国际化功能以及作为单个可再发行平台本机二进制文件进行部署的能力。 所有这些Go功能使Hugo易于拆包,运行并用于快速构建站点。
地貌
由Vagrant(基于Ruby的开发环境管理工具)的创建者创建的HashiCorp借助Go的速度和力量来构建更大,更宏大的项目: Terraform ,该系统用于在内部或云中构建IT基础架构通过定义文件变成代码。 您所做的任何更改都可以前滚或后滚,并且在调用代码之前,您将获得确切的结果摘要(即执行计划)。
蟑螂数据库
Go用于构建多种分布式的云原生应用程序。 CockroachDB因其弹性而得名,它是一个分布式数据库,旨在承受各种灾难(甚至是数据中心故障),但仍会继续响应您的SQL查询。 CockroachDB完全是用Go编写的,除了C ++的小巧之外,它还具有从前一个项目RocksDB获得的性能密集型核心功能。
引力传送
Go已成为许多网络项目以及基于它们的下游项目的默认语言。 恰当的例子:Go的SSH实现本身非常有用,可作为Gravitational Teleport之类的项目的基础。 重力传送使用户可以通过外壳安全地访问服务器。 它通过单点登录来增强安全性,但是不需要通常需要的那种管理开销(例如,密钥管理和轮换)。