简述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的语义理解工具套件也在此次峰会上全新发布,旨在为企业级开发者提供更 ...
随机推荐
- JS 希尔排序完全理解
希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 ...
- ASP.NET Core – Byte, Stream, Directory, File 基础
前言 以前的文章: Stream 基础和常用 和 IO 常用. 这篇主要是做一个整理, 方便要用的时候 warm up. 之前有讲过 Bit, Byte 的基本概念: Bit, Byte, ASCII ...
- Java获取Object中Value的方法
在Java中,获取对象(Object)中的值通常依赖于对象的类型以及我们希望访问的属性.由于Java是一种静态类型语言,直接从一个Object类型中访问属性是不可能的,因为Object是所有类的超类, ...
- 深入理解JNDI注入—RMI/LDAP攻击
目录 前言 JNDI 注入简单理解 透过Weblogic漏洞深入理解 RMI与LDAP的区别 JNDI+RMI 漏洞代码触发链 lookup触发链 JNDI+LDAP 前言 本篇文章初衷是在研究log ...
- 大模型应用开发初探 : 快速直观感受RAG
大家好,我是Edison. 上一篇,我们了解了什么如何让一些开源小参数量模型具有函数调用的能力.这一篇,我们来快速了解下RAG(检索增强生成)并通过一个简单的DEMO来直观感受一下它的作用. RAG是 ...
- foobar2000 v2.1.3 汉化版(更新日期:2024.04.02)
foobar2000 v2.1.3 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...
- USB协议详解第8讲(USB描述符-字符串和语言ID描述符)
1.字符串描述符相关概念 字符串描述符:首先,字符串描述符就是用字符串描述一个设备的一些属性,毕竟人能看懂的是字符,而不是十六进制,描述的属性包括设备厂商名字.产品名字.产品序列号.各个配置名字.各个 ...
- Linux进程调度-组调度及带宽控制
1. 概述 组调度(task_group)是使用Linux cgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等. 比如,看一个实际的例子: A ...
- 2020年度国产数据库:openGauss
根据墨天轮2020年一年的数据库流行度得分趋势变化,我们选出了流行热度增长显著的数据库为2020年度国产数据库.恭喜 华为开源关系型数据库 openGauss 荣获 "2020年度国产数据库 ...
- 56.dom如何映射数据
所谓的映射机制就是 页面的标签和js中获取的页面标签对象,无论修改哪一个,另一个都会随之更新 : 映射原理:浏览器在渲染页面的时候给每一个元素都设置了很多内置的属性(包含样式的), 当我们在J ...