Go语言都这么火了

haicoder_ibai · · 6454 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# Go语言适合做什么 ## Go语言适合做什么教程 **[Go 语言](https://haicoder.net/golang/golang-tutorial.html)** 主要适合做服务器编程、分布式系统、数据库代理器、中间件、网络编程、数据库操作以及开发云平台等。 ## Go语言发展 ### Go语言发展 2007 年 9 月,Rob Pike 在 Google 分布式编译平台上进行 **[C++](https://haicoder.net/cpp/cpp-tutorial.html)** 编译,在漫长的等待过程中,他和 Robert Griesemer 探讨了程序设计语言的一些关键性问题,他们认为,简化编程语言相比于在臃肿的语言上不断增加新特性,会是更大的进步。随后他们在编译结束之前说服了身边的 Ken Thompson,觉得有必要为此做一些事情。几天后,他们发起了一个叫 Golang 的项目,将它作为自由时间的实验项目。 2008 年 5 月 Google 发现了 GO 语言的巨大潜力,得到了 Google 的全力支持,这些人开始全职投入 GO 语言的设计和开发。2009 年 11 月 GO 语言第一个版本发布。2012 年 3 月第一个正式版本 Go1.0 发布。 2015 年 8 月 go1.5 发布,这个版本被认为是历史性的。完全移除 **[C 语言](https://haicoder.net/c/c-tutorial.html)** 部分,使用 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](https://haicoder.net/linux/linux-tutorial.html)** 操作系统(最初使用 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](https://haicoder.net/php/php-tutorial.html)** 实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。 而 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 可以操作各种各样的数据库,比如 **[Mysql](https://haicoder.net/mysql/database-course.html)**、 **[Redis](https://haicoder.net/redis/redis-birth.html)**、Mongodb 等。 | | 开发云平台 | 目前国外很多云平台在采用 Go 开发。 | ### Go语言代表项目 Go 发布之后,很多公司特别是云计算公司开始用 Go 重构他们的基础架构,很多都是直接采用 Go 进行了开发,最近热火朝天的 **[Docker](https://haicoder.net/docker/docker-course.html)** 就是采用 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](https://haicoder.net/python/python-tutorial.html)** 的 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](https://haicoder.net/java/java-development.html)** 和 Go 编写,微博视频转码及存储服务用 Go 编写。 | | 爱奇艺 | VR 后台系统中间件,VR 端的 HTTP 接口。 | | 猎豹移动 | 消息推送。 | | 网易 | 网易蜂巢容器公有云。 | | 哔哩哔哩 | 弹幕。 | | 巨人网络 | 部分手机游戏的服务端。 | | 今日头条 | Nsq 是由 Go 语言开发的高性能、高可用消息队列系统,性能非常高,每天能处理数十亿条的消息。 | ## Go语言适合做什么总结 Go 语言主要适合做服务器编程、分布式系统、数据库代理器、中间件、网络编程、数据库操作以及开发云平台等。 Go 的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用 Go 写的重量级项目。docker/kubernetes 生态圈,几百/千万行代码,基本统治了云原生应用市场。去年大热的区块链,以太坊的 geth,比特币的 btcd,闪电网络的 lnd,都是 Go 语言开发。 查看更多文章,可以关注下方公众号: ![quickmark.png](https://static.studygolang.com/201028/fb0cc94ef8651365394e57638baa964a.png)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6454 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传