Go应用场景与适应项目
2253
2021.10.16
发布于 未知归属地

Go应用领域

鉴于Go语言的特点和设计的初衷,Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

Go应用领域

  • 服务器编程
    以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。

  • 微服务
    现在越来越多新的项目采用微服务架构,前面介绍的优秀项目中也看到很多Go提供的微服务框架,如git-kit、go-micro等。
    举些具体公司的例子。
    比如今日头条,2017的一篇文章今日头条使用Go构建了千万级微服务,其中说到有80%的流量都跑在Go上,其中提到头条还开发了自己的一套微服务框架;还有B站也是采用的Go开发。

  • 云平台
    云服务很多都是采用Go进行开发,比如国内著名的七牛云是全站采用Go开发;还有如盛大CDN、阿里云CDN,华为云等。而且云平台基础设施如docker、kubernetes等也是Go开发;

  • Web
    网络编程这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
    曾经的web 领域主要是Java、C#和PHP这三大语言。而现在基本每种语言都有自己完善的web生态,Go也是如此,标准库已经自带成熟简单的net/http包。而且Go的主流Web开发框架也有很多,比如 gin、beego、iris 等等。

  • 区块链
    当前两个主流的区块链框架,分布式记账本框架hyperledger和以太坊合约框架 go-ethereum都是使用Go开发; 再比如fabric是目前最知名的联盟链, 也有go语言的版本
    某招聘网站的区块链职位要求技能的分析,如下图。
    image.png

  • 分布式
    诸如数据库中间件、分布式系统/分布式存储、代理服等项目很多是采用Go开发,比如前面的介绍cockroachdb、etcd等;
    京东云消息推送系统、云存储等都有使用Go做开发、360的推送服务也在使用。
    Go官方有篇博客blog.golang.org/qihoo 就是出自他们。

  • 其他
    除了上面介绍的这些,其实很多领域都能看到Go的影子,如直播领域、游戏开发、Al算法等等,在其中Go为后台的调度系统、任务处理,批量的数据计算、系统监控等都提供了各种优秀的解决方案。
    比如知乎也使用Go进行重构了自己的推荐系统,查看文章舍弃Python,为什么知乎选用Go重构推荐系统?

Go不适合领域

  1. GUI: 例如开发IDE、移动App
  2. 数据分析、ML、大数据:需要极完整的集合框架、流畅的推导式、丰富的高阶函数
  3. 分布式计算:需要分布化地远程执行闭包,自动地序列化/反序列化;而不是新起进程执行二进制分发、进程间交换数据。移动闭包/Lambda的成本会小于移动大块数据
  4. 插件化定制、进程内热升级:需要语言虚拟机的支持,例如动态类加载,依赖注入
  5. 企业软件: 需要COTS交付、二次开发,基于非源代码的接口扩展,可以在重启或运行时启用新特性,无需编译整个系统的源代码。这类软件常常用像annotation一样的APT机制对语言元素做一定程度的元编程或修改
  6. 超大型软件和团队:需要很明确地on the fly地知道哪个接口被哪些类型实现了,哪些类型实现了哪些接口。Eclipse有1000W行LOC,InteliJlDEA有700W,JDK自身也有700W,Hadoop+HBase有400w,JBoss等应用服务器有600W,Spring框架有200W,其它第三方库...日常开发的JAVA商用软件,你常常跟几千万LOC打交道。但好像GO超过50W的开源项目只有限的Docker、K8S等。GO的开源生态系统仍然极其弱小,能用于商用产品质量的开源库只有Beego等屈指可数的几个。许多依赖开源库只有2位数的star。
  7. 另外Go快10年了,还没有进入大学,企业一般要自己培训培养合格工程师,雇佣数百人的培训成本(包括重复踩坑)还是蛮高的。历史上语言10年后,它的排名基本上会稳定下来,很难有大幅度上升了。例如,当年的Ruby也是大约10年后随着ROR火了一阵子。因为语言之间是互相学习演进的,GO曾经的卖点协程,已经陆续出现在其它语言中了,而GO预计下个10年仍可能会这个样子。

Go优秀项目

语言的目标是用于项目开发,并能打造出很多优秀的产品。那么,Golang有哪些好像优秀的项目呢?不搜不知道,一搜吓一跳!列举一下我收集到的golang开发的优秀项目,如下:

  • docker: golang头号优秀项目,通过虚拟化技术实现的操作系统与应用的隔离,也称为容器;
  • kubernetes: 由google开发,简称k8s,k8s和docker是当前容器化技术的重要基础设施;
  • etcd: 一种可靠的分布式KV存储系统,有点类似于zookeeper,可用于快速的云配置;
  • codis: 由国人开发提供的一套优秀的redis分布式解决方案;
  • tidb: 国内PingCAP 团队开发的一个分布式SQL 数据库,国内很多互联网公司在使用;
  • influxdb: 时序型DB,着力于高性能查询与存储时序型数据,常用于系统监控与金融领域;
  • cockroachdb: 云原生分布式数据库,继NoSQL之后出现的新的概念,称为NewSQL数据库;
  • beego: 国人开发的一款及其轻量级、高可伸缩性和高性能的web应用框架;
  • caddy: 类比于nginx,一款开源的,支持HTTP/2的 Web 服务端;
  • flynn: 一款开源的paas平台;
  • consul: HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置;
  • go-kit: Golang相关的微服务框架,这类框架还有go-micro、typthon;
  • go-ethereum: 官方开发的以太坊协议实现;
  • couchbase: 是一个非关系型数据库;
  • nsq: 一款高性能、高可用消息队列系统,每天能处理数十亿条的消息;
  • packer: 一款用来生成不同平台的镜像文件的工具,例如VM、vbox、AWS等;
  • doozer: 高速的分布式数据同步服务,类似ZooKeeper;
  • tsuru: 开源的PAAS平台,和SAE实现的功能一模一样;
  • gor: 一款用Go语言实现的简单的http流量复制工具;

世界正在使用Go的企业

国内大厂开源的Golang项目

  • 字节跳动:kitex,开源
  • 滴滴:有自己的一套微服务框架,未开源
  • 腾讯:TarsGo,开源,并且是Linux基金会项目
  • B站:kratos,开源
  • 斗鱼:Jupiter,开源
  • 好未来:go-zero,开源
  • 阿里:dubbo-go,开源
  • 华为:Go Chassis,开源
  • 知乎:内部改用go重构后端

golang相关网址

评论 (0)