Go语言适合做什么

Go语言适合做什么教程

Go 语言 主要适合做服务器编程、分布式系统、数据库代理器、中间件、网络编程、数据库操作以及开发云平台等。

Go语言发展

Go语言发展

2007 年 9 月,Rob Pike 在 Google 分布式编译平台上进行 C++ 编译,在漫长的等待过程中,他和 Robert Griesemer 探讨了程序设计语言的一些关键性问题,他们认为,简化编程语言相比于在臃肿的语言上不断增加新特性,会是更大的进步。随后他们在编译结束之前说服了身边的 Ken Thompson,觉得有必要为此做一些事情。几天后,他们发起了一个叫 Golang 的项目,将它作为自由时间的实验项目。

2008 年 5 月 Google 发现了 GO 语言的巨大潜力,得到了 Google 的全力支持,这些人开始全职投入 GO 语言的设计和开发。2009 年 11 月 GO 语言第一个版本发布。2012 年 3 月第一个正式版本 Go1.0 发布。

2015 年 8 月 go1.5 发布,这个版本被认为是历史性的。完全移除 C 语言 部分,使用 GO 编译 GO,少量代码使用汇编实现。另外,他们请来了内存管理方面的权威专家 Rick Hudson,对 GC 进行了重新设计,支持并发 GC,解决了一直以来广为诟病的 GC 时延(STW)问题。并且在此后的版本中,又对 GC 做了更进一步的优化。

到 go1.8 时,相同业务场景下的 GC 时延已经可以从 go 1.1 的数秒,控制在 1 ms 以内。GC 问题的解决,可以说 GO 语言在服务端开发方面,几乎抹平了所有的弱点。在 GO 语言的版本迭代过程中,语言特性基本上没有太大的变化,基本上维持在 GO 1.1 的基准上,并且官方承诺,新版本对老版本下开发的代码完全兼容。事实上,GO 开发团队在新增语言特性上显得非常谨慎,而在稳定性、编译速度、执行效率以及 GC 性能等方面进行了持续不断的优化。

Go语言开发团队

GO 语言的开发阵营可以说是空前强大,主要成员中不乏计算机软件界的历史性人物,对计算机软件的发展影响深远。Ken Thompson,来自贝尔实验室,设计了 B 语言,创立了 Unix 操作系统(最初使用 B 语言实现),随后在 Unix 开发过程中,又和 Dennis Ritchie 一同设计了 C 语言,继而使用 C 语言重构了 Unix 操作系统。

Dennis Ritchie 和 Ken Thompson 被称为 Unix 和 C 语言之父,并在 1983 年共同被授以图灵奖,以表彰他们对计算机软件发展所作的杰出贡献。Rob Pike,同样来自贝尔实验室,Unix 小组重要成员,发明了 Limbo 语言,并且和 Ken Thompson 共同设计了 UTF-8 编码,《Unix编程环境》、《编程实践》 作者之一。可以说,GO 语言背靠 Google 这棵大树,又不乏牛人坐镇,是名副其实的 “牛二代”。

选择Go语言

选择 GO 语言,主要是基于两方面的考虑执行性能缩短 API 的响应时长,解决批量请求访问超时的问题。在 Uwork 的业务场景下,一次 API 批量请求,往往会涉及对另外接口服务的多次调用,而在之前的 PHP 实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。

而 GO 语言不一样,通过协程可以方便的实现 API 的并行处理,达到处理效率的最大化。依赖 Golang 的高性能 HTTP Server,提升系统吞吐能力,由 PHP 的数百级别提升到数千里甚至过万级别。 开发效率 GO 语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建 API 业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。

Go语言适合做什么

Go语言使用领域

Go 语言从发布 1.0 版本以来备受众多开发者关注并得到广泛使用,Go 语言的简单、高效、并发特性吸引了众多传统语言开发者的加入,而且人数越来越多。鉴于 Go 语言的特点和设计的初衷,Go 语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go 语言广泛应用于 Web 应用、API 应用、下载应用等;除此之外,Go 语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用 Go 开发。

使用领域 说明
服务器编程 以前你如果使用 C 或者 C++ 做的那些事情,用 Go 来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
分布式系统 Go 语言可以用于分布式系统、数据库代理器、中间件等,例如 Etcd。
网络编程 这一块目前应用最广,包括 Web 应用、API 应用、下载应用,而且 Go 内置的 net/http 包基本上把我们平常用到的网络功能都实现了。
数据库操作 Golang 可以操作各种各样的数据库,比如 MysqlRedis、Mongodb 等。
开发云平台 目前国外很多云平台在采用 Go 开发。

Go语言代表项目

Go 发布之后,很多公司特别是云计算公司开始用 Go 重构他们的基础架构,很多都是直接采用 Go 进行了开发,最近热火朝天的 Docker 就是采用 Go 开发的。

使用 Go 语言开发的开源项目非常多。早期的 Go 语言开源项目只是通过 Go 语言与传统项目进行 C 语言库绑定实现,例如 Qt、Sqlite 等;后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。

代表项目 说明
云计算基础设施领域 docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。
基础软件 tidb、influxdb、cockroachdb 等。
微服务 go-kit、micro、monzo bank 的 typhon、bilibili 等。
互联网基础设施 以太坊、hyperledger 等。
开发云平台 目前国外很多云平台在采用 Go 开发。

Go语言开源项目

开源项目 说明
Docker Docker 是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。
go语言 Go 语言自己的早期源码使用 C 语言和汇编语言写成。从 Go 1.5 版本后,完全使用 Go 语言自身进行编写。
Kubernetes Google 公司开发的构建于 Docker 之上的容器调度服务,用户可以通过 Kubernetes 集群进行云端容器集群管理。
etcd 一款分布式、可靠的 KV 存储系统,可以快速进行云配置。
beego beego 是一个类似 Python 的 Tornado 框架,采用了 RESTFul 的设计思路,使用 Go 语言编写的一个极轻量级、高可伸缩性和高性能的 Web 应用框架。
martini 一款快速构建模块化的 Web 应用的 Web 框架。
codis 国产的优秀分布式 Redis 解决方案。
delve Go 语言强大的调试器,被很多集成环境和编辑器整合。

Go语言代表公司

公司 说明
Facebook Facebook 也在用,为此他们还专门在 Github 上建立了一个开源组织 facebookgo。
腾讯 腾讯作为国内的大公司,还是敢于尝试的,尤其是 Docker 容器化这一块,他们在 15 年已经做了 docker 万台规模的实践。
百度 目前所知的百度的使用是在运维这边,是百度运维的一个 BFE 项目,负责前端流量的接入。 其次就是百度的消息系统。负责公司手百消息通讯系统服务器端开发及维护。
京东 京东云消息推送系统、云存储,以及京东商城等都有使用 Go 做开发。
小米 小米对 Golang 的支持,莫过于运维监控系统的开源,此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用 Golang。
360 360 对 Golang 的使用也不少,一个是开源的日志搜索系统 Poseidon,托管在 Github 上,还有 360 的推送团队也在使用,他们还写了篇博文在 Golang 的官方博客上。
七牛云 七牛云用了近 50 万行代码,来实现整个产品。
美团 美团后台流量支撑程序。应用范围:支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能。
滴滴 基础服务平台。
金山微看 应用范围:服务接口,后台流程服务,消息系统,图片系统
搜狗 搜狗推送系统。Push 系统中用于维持与客户端连接的部分。
QOR 模块化的电商系统。
weico 产品名 weico 3.0, 服务端所有代码都是用 Go 实现。
仙侠道 应用范围: 游戏服务端(通讯、逻辑、数据存储)。
快玩游戏 应用范围:实时消息系统、用户认证、用户会话、统一统计接口。
盛大云CDN CDN 的调度系统、分发系统、监控系统、短域名服务,CDN 内部开放平台、运营报表系统以及其他一些小工具等。
实验楼 实验楼 - 第一家以实验为核心的IT在线教育平台。
新浪微博 中间件和弹性调度用 Java 和 Go 编写,微博视频转码及存储服务用 Go 编写。
爱奇艺 VR 后台系统中间件,VR 端的 HTTP 接口。
猎豹移动 消息推送。
网易 网易蜂巢容器公有云。
哔哩哔哩 弹幕。
巨人网络 部分手机游戏的服务端。
今日头条 Nsq 是由 Go 语言开发的高性能、高可用消息队列系统,性能非常高,每天能处理数十亿条的消息。

Go语言适合做什么总结

Go 语言主要适合做服务器编程、分布式系统、数据库代理器、中间件、网络编程、数据库操作以及开发云平台等。

Go 的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用 Go 写的重量级项目。docker/kubernetes 生态圈,几百/千万行代码,基本统治了云原生应用市场。去年大热的区块链,以太坊的 geth,比特币的 btcd,闪电网络的 lnd,都是 Go 语言开发。