简述GoLang优势与生态
开门见山,一睹golang的风采
- 性能优势
- 部署运维成本低
- 编码格式统一;测试简单
1. 性能优势
Go 语言被称为是:"21世纪的C语言",虽然这个帽子戴的有点高,不妨这里给大家解读一下,其实这句话有两层含义:
第一层含义是: Go 语言的语法和C语言类似,如果你会C语言,上手会很快。但如果你不会C语言,其实也不用担心,比起C语言, Go 语言上手其实很简单。
第二层含义是: Go 语言的性能, Go 语言内置强大的并发模型 goroutine,它能让我们快速开发高并发web系统,并且在同样服务器资源的情况下, Go 语言表现出来的性能也是相当的优秀,这也是推荐大家选择选择 Go 语言的原因之一。
2. 部署运维成本低
这是我选择 Go 语言的第二个原因。 Go 语言属于编译型语言,最终部署上线,我们只需要部署项目编译后的二进制文件即可,类比一下像 PHP 或 python 这种解释性语言在服务器上运行还需要安装相应的运行环境,而使用二进制代码方式使得部署变得更为简单,也不会存在多版本共享环境的兼容性问题,运维也变得非常容易。
3.1 编码格式统一
Go 语言官方内置了统一代码风格的工具 gofmt( IDE 一般都会内置集成), 用来规范大家代码风格,这对于需要多人协作项目尤为重要。
比如,现在你需要接手一个外包团队项目,这个外包项目如果项目的编码风格和你不一致,当你接手后,你的心情多半沮丧的,因为这会增加你的改造成本。
更或是,你现在需要接手一个由前前前同事所开发的老项目,如果代码风格不统一,可想而知接下来会发生什么...
Go 语言官方其实也是注意到了这些痛点,也避免了由第三方产生的规范不一致的问题,以官方的角度统一规范,从而降低整个项目的协作运维成本。
3.2 测试简单
Go 语言编写测试代码真的非常简单,这个特性真的是刚需啊。我们在项目开发中经常会遇到这样的事情,比如当你负责为项目负责开发一个独立的短信服务模块,这个功能供另个同事在项目里调用,当你开发完成后如何测试功能是否正常呢?
这种测试在 Go 语言中变得相当容易,你只需要在你代码文件同级目录创建一个以 _test.go 结尾的文件,然后在文件里编写针对特定功能测试函数即可,更重要的是,这个测试文件是可以单独运行的,你不需要再去集成整个项目运行环境, Go 语言让单元测试变得非常容易。
此外,我们经常还会做一些基准测试,比如:每种语言都会为字符串拼接提供多种实现方式,那不同的拼接性能如何对比测试呢?在 Go 语言里编写这种基准测试非常简单,至于更细节的实操内容,后面会有单独的章节介绍 Go 语言如何编写测试代码。
Go 语言生态
当下使用 Go 语言开发的软件产品非常众多,而且知名的产品也不再少数,足见这门语言的强大:
| 软件 | 描述 | 链接 |
|---|---|---|
| docker | 家喻户晓的容器技术 | github.com/moby/moby |
| kubernetes | 容器编排引擎,google出品 | github.com/kubernetes/kubernetes |
| etcd | 分布式服务注册发现系统 | github.com/etcd-io/etcd |
| influxdb | 时序数据库 | github.com/influxdata/influxdb |
| grafana | 数据监控可视化看板 | github.com/grafana/grafana |
| prometheus | 开源监控系统 | github.com/prometheus/prometheus |
| consul | 分布式服务发现系统 | github.com/hashicorp/consul |
| nsq | 亿级消息队列 | github.com/nsqio/nsq |
| TiDB | 分布式数据库, go + rust 打造 | github.com/pingcap/tidb |
除了上述表格中列举的产品外, Go 语言还涉足于像区块链、微服务等场景,开源的框架也非常多,所以说 Go 语言是一门值得去学习的语言。
简述GoLang优势与生态的更多相关文章
- 第一周-----Java 的核心优势和生态体系——程序员们希望他们编写的程序能够运行在不同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。
跨平台是Java 语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已覆盖IT各个行业的“第一大语言,称为IT界的英语”
- sync or async connect redis in golang
Head of head 在golang的整个生态里,redis client lib全部都使用多连接或者连接池.这是让人难以理解的,所以我和xiaofei一起写了一个同时支持同步和异步的redis ...
- 选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别
转载自https://zhuanlan.zhihu.com/p/506265757 前言 大家好,我是 Liangdi, podman 4.x 版本已经发布了, 我也从 docker 开始向 podm ...
- 京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(下)
在上次推送的文章中(传送门),田琪老师分享了他的DockerCon 2015峰会见闻.在“QCon高可用架构群”中,田老师分享之后,几位专家也参与了讨论.他们是: 闫国旗:京东资深架构师,京东架构技术 ...
- 从 PHP 到 Java
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- 甘果移动老甘:移动互联网变迁中的App和小程序
2018 年 10 月13 日,由又拍云和知晓云联合主办的 Open Talk 丨2018 小程序开发者沙龙系列活动广州站拉开帷幕,甘果移动的 CEO 路文杰(老甘)在沙龙上做了<移动互联网变迁 ...
- linux --- 10.常见命令
1.在登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么()A.NID B.PID C.UID C.CID 2.下面那个用户存放用户密码信息()A./boot B./etc ...
- linux test
some test .在登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么(b) A.NID B.PID C.UID C.CID .下面那个用户存放用户密码信息(b) A./ ...
- Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...
- 百度艾尼ERNIE专场再入魔都,11月23日线下开讲!
这个十一月,是属于深度学习开发者们的秋季盛宴.『WAVE Summit+』2019 深度学习开发者秋季峰会刚刚落下帷幕,基于ERNIE的语义理解工具套件也在此次峰会上全新发布,旨在为企业级开发者提供更 ...
随机推荐
- C++17: 用折叠表达式实现一个IsAllTrue函数
前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true. 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识, ...
- 音视频FAQ(二)视频直播延时高
摘要 延时高是实时互动技术中常见的问题之一,解决延时高问题需要综合考虑网络.设备.编解码算法等多个因素.解决方案包括优化设备端延时.优化网络传输延时和使用UDP进行音视频传输等.在选择音视频传输协议时 ...
- Node.js开发博客项目笔记-http请求处理(1)
处理get与post请求示例代码: const http = require('http'); const querystring = require('querystring'); const se ...
- CSS & JS Effect – FAQ Accordion & Slide Down
效果 参考: Youtube – Responsive FAQ accordion dropdown | HTML and CSS Tutorial 几个难点 1. 如何 align left for ...
- 图解YUV420、YUV420(YUY2)、YUV422(YVYU)
Y:亮度分量 UV:色度分量 1. 标准yuv指的是yuv420 一般看文章,会出现下面的公式,但不涉及具体的yuv格式,其实这一定指的是yuv420 Y与RGB的演算关系为:Y = 0.21 ...
- Windows右下角时间显示具体星期
事件起因: 有时候脑子不清楚,过着过着就会忘记今天是星期几,错过一些重要事情,于是乎就想看看Windows右下角能不能显示到具体星期,果然在查了资料之后这个需求可以达成 解决办法: 控制面板 - 日期 ...
- ROS基础入门——实操教程
ROS基础入门--实操教程 前言 本教程实操为主,少说书.可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记. Ruby Rose,放在这里相当合理 前言 ...
- initrd&init进程
initrd的全名是 init ramdisk,是一个启动时存在于内存的文件系统. kernal 到 initrd的流程 在GRUB加载kernel时,kernel会先在内存中制造一个rootfs当做 ...
- 将一个Eigen::Matrix中的数据(数组格式),按行写入到json文件当中.
1.这里主要实现如何以数组的形式写入到json文件当中,因为c++的Jsoncpp库中的.append只支持一个字符的写入(还是python的json友好).去网上找了老久的解决办法,发现中文解答全是 ...
- 墨天轮沙龙 | 亚马逊云科技李君:见微知著 - Serverless云原生数据库概览
导读 以业务为导向的数据库需要满足现代化应用的需要,以 Serverless 数据库为代表,云数据库正在迅速发展成熟,并带来更好的可访问性和高可用性,还有高扩展性与可迁移性. [墨天轮数据库沙龙-Se ...