Go 应用场景与适应项目
Go 应用领域
鉴于 Go 语言的特点和设计的初衷,Go 语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go 语言广泛应用于 Web 应用、API 应用、下载应用等;除此之外,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 语言的版本
某招聘网站的区块链职位要求技能的分析,如下图。
分布式
诸如数据库中间件、分布式系统/分布式存储、代理服等项目很多是采用 Go 开发,比如前面的介绍 cockroachdb、etcd 等;
京东云消息推送系统、云存储等都有使用 Go 做开发、360 的推送服务也在使用。
就是出自他们。
其他
除了上面介绍的这些,其实很多领域都能看到 Go 的影子,如直播领域、游戏开发、Al 算法等等,在其中 Go 为后台的调度系统、任务处理,批量的数据计算、系统监控等都提供了各种优秀的解决方案。
比如知乎也使用 Go 进行重构了自己的推荐系统,查看文章舍弃 Python,为什么知乎选用 Go 重构推荐系统?
Go 不适合领域
GUI: 例如开发 IDE、移动 App
数据分析、ML、大数据:需要极完整的集合框架、流畅的推导式、丰富的高阶函数
分布式计算:需要分布化地远程执行闭包,自动地序列化/反序列化;而不是新起进程执行二进制分发、进程间交换数据。移动闭包/Lambda 的成本会小于移动大块数据
插件化定制、进程内热升级:需要语言虚拟机的支持,例如动态类加载,依赖注入
企业软件: 需要 COTS 交付、二次开发,基于非源代码的接口扩展,可以在重启或运行时启用新特性,无需编译整个系统的源代码。这类软件常常用像 annotation 一样的 APT 机制对语言元素做一定程度的元编程或修改
超大型软件和团队:需要很明确地 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。
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 流量复制工具;
国内大厂开源的 Golang 项目
字节跳动:kitex,开源
滴滴:有自己的一套微服务框架,未开源
腾讯:TarsGo,开源,并且是 Linux 基金会项目
B 站:kratos,开源
斗鱼:Jupiter,开源
好未来:go-zero,开源
阿里:dubbo-go,开源
华为:Go Chassis,开源
知乎:内部改用 go 重构后端
Go 相关网址
官网里面新手推荐看:
A Tour of Go(Go语言编程指南)(中文版本在这里: Go 指南):主要是带你了解基础的 Go 语言和使用方法,重点是有个在线编译器,可以在浏览器里面写 Go 语言,直观感受 Go 语言;
How to Write Go Code:也是带你入门学习 Go 语言的,类似教程吧,英文的,新手同样可以看;
https://golang.org/ref/spec:Go 编程语言的参考手册,英文的;
评论