记得问一个已经在工作的师兄哪些语言需要是大势所趋需要掌握,他说他只会C、C++和Go,当时感到很震惊,我们在学校学的基本都是C、Java、Python之类的,Go语言很少接触,也不知道它的优势在哪。学了近一学期Go语言,在此查阅资料加上自己的感悟体会做个总结
Go语言的优势
- 可直接编译成机器码,不依赖其他库
- 静态类型语言,但是有动态语言的一些特性,编写效率高
- 语言层面支持并发,可以充分的利用多核
- 内置runtime,支持垃圾回收
- 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大
- 内置强大的工具,Go语言里面内置了很多工具链,如自动化格式化代码等
- 跨平台编译
- 内嵌C支持
Go语言适合做
- 服务器编程,例如处理日志、数据打包、虚拟机处理、文件系统等
- 分布式系统,数据库代理器等
- 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用
- 内存数据库,如google开发的groupcache,couchbase的部分组建
- 云平台,目前国外很多云平台在采用Go开发
Go语言的优秀项目
- 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
- couchbase,是一个非关系型数据库
- nsq,一款高性能、高可用消息队列系统,每天能处理数十亿条的消息
- packer,一款用来生成不同平台的镜像文件的工具,例如VM、vbox、AWS等
- doozer:高速的分布式数据同步服务,类似ZooKeeper
- tsuru:开源的PAAS平台,和SAE实现的功能一模一样
- gor:一款用Go语言实现的简单的http流量复制工具
Go语言的劣势
- 缺少框架:Go 语言没有一个主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel
- 错误处理:Go 语言通过函数和预期的调用代码简单地返回错误(或返回调用堆栈)而帮助开发者处理编译报错。虽然这种方法是有效的,但很容易丢失错误发生的范围,因此也很难向用户提供有意义的错误信息。
- 软件包管理:Go 语言的软件包管理绝对不是完美的。默认情况下,它没有办法制定特定版本的依赖库,也无法创建可复写的 builds。相比之下 Python、Node 和 Ruby 都有更好的软件包管理系统。