有一种语言堪称比语言排行榜前五热门选手的Python、Java更快,它就是GO语言。

Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。

在Go语言面世后的9年,有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer、k8s等,很多的大公司也在用,比如google(作为开发Go语言的公司,当仁不让)、Facebook、腾讯、百度、阿里、京东、小米以及360。

有人称:“Go 是互联网时代的C语言,不仅会制霸云计算,10 年内将会制霸整个 IT 领域。”那么,Go语言真的会制霸IT界吗?我们一起来了解一下这位“新秀”选手。

1

GO语言的优势

1性能

Go 极其地快。其性能与 Java 或 C++相似。在我们的使用中,Go 一般比 Python 要快 30 倍。以下是 Go 与 Java 之间的基准比较:

2语言性能很重要

对很多应用来说,编程语言只是简单充当了其与数据集之间的胶水。语言本身的性能常常无关轻重。

但是 Stream 是一个 API 提供商,服务于世界 500 强以及超过 2 亿的终端用户。数年来我们已经优化了 Cassandra、PostgreSQL、Redis 等等,然而最终抵达了所使用语言的极限。

Python 非常棒,但是其在序列化/去序列化、排序和聚合中表现欠佳。我们经常会遇到这样的问题:Cassandra 用时 1ms 检索了数据,Python 却需要 10ms 将其转化成对象。

3开发者效率&过于创新

看一下绝佳的GO语言入门教程中的一小段代码:

1. package main 

2. type openWeatherMap struct{}func (w openWeatherMap) temperature(city string) (float64, error) { 

3.    resp, err := http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=YOUR_API_KEY&q=" + city) 

4.    if err != nil { 

5.        return 0, err 

6.    } 

7.    defer resp.Body.Close() 

8.    var d struct { 

9.        Main struct { 

10.            Kelvin float64 `json:"temp"` 

11.        } `json:"main"` 

12.    } 

13.    if err := json.NewDecoder(resp.Body).Decode(&d); err != nil { 

14.        return 0, err 

15.    }

如果你是一个新手,看到这段代码你并不会感到吃惊。它展示了多种赋值、数据结构、指针、格式化以及内置的 HTTP 库。

当我第一次编程时,我很喜欢使用 Python 的高阶功能。Python 允许你创造性地使用正在编写的代码,比如,你可以:

  • 在代码初始化时,使用 MetaClasses 自行注册类别

  • 置换真假

  • 添加函数到内置函数列表中

  • 通过奇妙的方法重载运算符

毋庸置疑这些代码很有趣,但也使得在读取其他人的工作时,代码变得难以理解。

Go 强迫你坚持打牢基础,这也就为读取任意代码带来了便利,并能很快搞明白当下发生的事情。

4并发性&通道

Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。

创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。你可以借助通道实现 goroutines 之间的通信。Go 运行时间可以表示所有的复杂性。Goroutines 以及基于通道的并发性方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO——所有不带有复杂的开发。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的样板代码。你只需使用关键词「go」添加函数调用:

1. package main 

2. import ( 

3.    "fmt" 

4.    "time")func say(s string) { 

5.    for i := 0; i < 5; i++ { 

6.        time.Sleep(100 * time.Millisecond) 

7.        fmt.Println(s) 

8.    }}func main() { 

9.    go say("world") 

10.    say("hello")}

Go 的并发性方法非常容易上手,相较于 Node 也很有趣;在 Node 中,开发者必须密切关注异步代码的处理。

并发性的另一个优质特性是竞赛检测器,这使其很容易弄清楚异步代码中是否存在竞态条件。

5快速的编译时间

当前我们使用 Go 编写的最大微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。我热爱击剑,但是当我依然记得代码应该做什么之时,事情已经完成就更好了。

6打造团队的能力

首先,最明显的一点是:Go 的开发者远没有 C++和 Java 等旧语言多。据知,有 38% 的开发者了解 Java,19.3% 的开发者了解 C++,只有 4.6% 的开发者知道 Go。GitHub 数据表明了相似的趋势:相较于 Erlang、Scala 和 Elixir,Go 更为流行,但是相较于 Java 和 C++ 就不是了。

幸运的是 Go 非常简单,且易于学习。它只提供了基本功能而没有多余。Go 引入的新概念是「defer」声明,以及内置的带有 goroutines 和通道的并发性管理。正是由于 Go 的简单性,任何的 Python、Elixir、C++、Scala 或者 Java 开发者皆可在一月内组建成一个高效的 Go 团队。

7强大的生态系统

对我们这么大小的团队(大约 20 人)而言,生态系统很重要。如果你需要重做每块功能,那就无法为客户创造收益了。Go 有着强大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。

Go 的生态系统相比于 Rust、Elixir 这样的语言有很大的优势。当然,它又略逊于 Java、Python 或 Node 这样的语言,但它很稳定,而且你会发现在很多基础需求上,已经有高质量的文件包可用了。

8GOFMT,强制代码格式

Gofmt 是一种强大的命令行功能,内建在 Go 的编译器中来规定代码的格式。从功能上看,它类似于 Python 的 autopep8。格式一致很重要,但实际的格式标准并不总是非常重要。Gofmt 用一种官方的形式规格代码,避免了不必要的讨论。

9gRPC和Protocol Buffres

Go 语言对 protocol buffers 和 gRPC 有一流的支持。这两个工具能一起友好地工作以构建需要通过 RPC 进行通信的微服务器(microservices)。我们只需要写一个清单(manifest)就能定义 RPC 调用发生的情况和参数,然后从该清单将自动生成服务器和客户端代码。这样产生代码不仅快速,同时网络占用也非常少。

从相同的清单,我们可以从不同的语言生成客户端代码,例如 C++、Java、Python 和 Ruby。因此内部通信的 RESET 端点不会产生分歧,我们每次也就需要编写几乎相同的客户端和服务器代码。

2

不足之处

1缺少框架

Go 语言没有一个主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。这是 Go 语言社区激烈讨论的问题,因为许多人认为我们不应该从使用框架开始。在很多案例情况中确实如此,但如果只是希望构建一个简单的 CRUD API,那么使用 Django/DJRF、Rails Laravel 或 Phoenix 将简单地多。

2错误处理

Go 语言通过函数和预期的调用代码简单地返回错误(或返回调用堆栈)而帮助开发者处理编译报错。虽然这种方法是有效的,但很容易丢失错误发生的范围,因此我们也很难向用户提供有意义的错误信息。错误包(errors package)可以允许我们添加返回错误的上下文和堆栈追踪而解决该问题。

另一个问题是我们可能会忘记处理报错。诸如 errcheck 和 megacheck 等静态分析工具可以避免出现这些失误。虽然这些解决方案十分有效,但可能并不是那么正确的方法。

3软件包管理

Go 语言的软件包管理绝对不是完美的。默认情况下,它没有办法制定特定版本的依赖库,也无法创建可复写的 builds。相比之下 Python、Node 和 Ruby 都有更好的软件包管理系统。然而通过正确的工具,Go 语言的软件包管理也可以表现得不错。

我们可以使用 Dep 来管理依赖项,它也能指定特定的软件包版本。除此之外,我们还可以使用一个名为 VirtualGo 的开源工具,它能轻松地管理 Go 语言编写的多个项目。

3

推荐书籍

1《Go语言学习笔记》



推荐理由:作为时下流行的一种系统编程语言,Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。本书经四年多逐步完善,内容覆盖了语言、运行时、性能优化、工具链等各层面知识。且内容经大量读者反馈和校对,没有明显的缺陷和错误。

适合人群:本书不适合编程初学入门,可供有实际编程经验或正在使用Go 工作的人群参考。

2《Go语言实战》

推荐理由:William Kennedy是一位熟练的软件开发者,也是博客GoingGo.Net的作者。本书向读者提供一个专注、全面且符合语言习惯的视角。Go语言实战同时关注语言的规范和实现,涉及的内容包括语法、类型系统、并发、管道、测试,以及其他一些主题。


适合人群:全覆盖,侧重初学者

3《Go Web编程》


推荐理由: 《Go Web编程》介绍如何用Go语言进行Web应用的开发,将Go语言的特性与Web开发实战组合到一起,帮读者成功地构建跨平台的应用程序,节省Go语言开发Web的宝贵时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解,读者可以更加方便地找到各种编程问题的解决方案,内容涵盖文本处理、表单处理、Session管理、数据库交互、加/解密、国际化和标准化,以及程序的部署维护等运维方面的知识,最后还介绍了一个快速开发的框架帮助您迅速进入Go语言的Web开发。

适合人群:全覆盖

4《Go语言编程》


推荐理由:作者是业界大神级别的人物,七牛云存储团队的核心技术人员,也是国内最早应用和推广 Go 语言技术的专家!本书内容简炼,重点突出,将 Go 语言的特性做了充分的分析和总结,并给出 Go 实例的代码;内容体系可能更适合有一定编程基础的程序员阅读!本书是国内最早的中文版的 Go 技术书籍之一,虽然发行时间比较早,但仍可以作为重要参考!电子版和纸质版都有!


适合人群:全覆盖,侧重有经验的程序员

5《Go并发编程实战(第2版)》


推荐理由:本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多进程编程和多线程编程有关的知识,然后重点介绍了goroutine、channel以及Go提供的传统同步方法,最后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。

适合人群:适用于有一定计算机编程基础的从业者以及对Go语言编程感兴趣的爱好者,非常适合作为Go语言编程进阶教程。

6《Go 语言程序设计》

推荐理由:国外最经典的Go语言著作,Go语言编程的先驱者Mark Summerfield的实践经验总结。这是一本Go语言实战指南,帮你了解Go语言,按Go语言的方式思考,以及使用Go语言来编写高性能软件。

作者展示了如何编写充分利用Go语言突破性的特性和惯用法的代码,以及Go语言在其他语言之上所做的改进,并着重强调了Go语言的关键创新。注重实践教学,每章都提供了多个经过精心设计的代码示例。由国内第一个核心服务完全采用Go语言实现的团队——七牛团队核心成员翻译。

适合人群:适用于有一定Go语言编程编程的爱好者,非常适合作为Go语言编程进阶教程。

4

最后

Go 是一种非常高效的语言,高度支持并发性。同时,它也像 C++和Java 一样快。虽然相比于 Python 和 Ruby,使用 Go 建立东西需要更多的时间,但在后续的代码优化上可以节省大量时间。

对新手开发者而言,Go 结合了强大的生态系统、易于上手,也有超快的表现、高度支持并发性,富有成效的编程环境使它成为了一种好的选择。

你掌握Go语言了吗?留言说说你对Go语言的看法!

参考来源:

  • jb51.net

  • 火链区块链技术人才输出

- End -

     往期热门资讯:    

  • 4款好用的密码管理器,你值得拥有

  • 他说,编程的黄金时代已到

  • 最酷的程序员应该知道的【LLVM】!

  • 【招募】看雪 Android 安全小组招募成员

公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com

比Python、Java更快的 Go 语言,能否称霸?相关推荐

  1. Java更快地对基元数组进行排序?

    看起来Java的原语排序数组在不久的将来可能会提高性能. 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ,标题为&qu ...

  2. 将python编程为c_使用Cython为Python编写更快的C扩展

    在我们这个包含了 7 个 PyPI 库的系列文章中学习解决常见的 Python 问题的方法. Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途(例如 Web 编程.业务 ...

  3. python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  4. python代码技巧_让你python代码更快的3个小技巧

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  5. 让你python代码更快的3个小技巧

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  6. python程序写完后点哪个运行快_让你的Python运行更快

    讨厌Python的人总是说,他们不想使用它的原因之一是它很 慢.嗯,特定程序(无论使用何种编程语言)是快还是慢,在很大程度上取决于编写该程序的开发人员以及编写优化而 快速的 程序的技能和能力 . 因此 ...

  7. 给想学python-零基础的小白,如何学Python才能更快就业?

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 本篇文章主要讲,如果是一个纯0 ...

  8. c+和python哪个快-python比c更快

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的优点是代码可重用性高和开发速度快,但是时间和内存的使用不如c++. ...

  9. php java python c语言_两分钟速览Java、PHP、C语言、Python四大编程

    Java.PHP.C语言.Python语言界的四大天王,历来一直为想成为程序猿的必经之路.山东IT培训优就业将从每个语言的基本信息.定义.优点.缺点.用途.前景.趣闻等方面逐一分析每一个语言,让你一扫 ...

  10. 用 PyPy 让你的 Python 代码运行得更快!

    Python是开发人员中最常用的编程语言之一,但它有一定的局限性.例如,对于某些应用程序而言,它的运行速度可能比其它语言低100倍.这就是为什么当Python的运行速度成为用户瓶颈后,许多公司会用另一 ...

最新文章

  1. 【怎样写代码】参数化类型 -- 泛型(一):泛型概述
  2. 嵌入式linux 考试大纲,《嵌入式Linux》课程考试大纲-武汉工程大学学生进
  3. 瞬间学会使用java中list的retainAll方法
  4. elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能...
  5. 文巾解题 45. 跳跃游戏 II
  6. java网络编程udp_java网络编程(UDP详解)
  7. 腾讯云DevOps技术揭秘:新时代运维重器Tencent Hub最佳实践
  8. 前端学习(2682):重读vue电商网站3之登录页面总结el-form 组件问题
  9. python语言高空坠球_高空坠物打击体验装置制造方法
  10. python学习--关注容易被忽略的知识点---(一)python基础
  11. python float转int_Python 常见内置数据类型及其转换方法
  12. 前后端接口文档规范模板
  13. 七升七降调号_巧识五线谱08:如何记住七个“降号调”的调号与调的对应关系?...
  14. 点击电脑版微信一直打不开解决方案
  15. 使用Python爬虫爬取淘宝商品并分析
  16. python简历模板_于是我用 Python 重写了那个上千 star 的“开源”简历模板
  17. “沉浸式”住宿体验——酒店的新瓶,民宿的老酒
  18. abaqus中六面体单元对比四面体
  19. JavaEE | 可变参数
  20. 了解云桌面,看这一篇文章就够了

热门文章

  1. 自动化监控:主动发现自动注册
  2. Stack of js
  3. 一个简单的WeakList的实现
  4. 如何清除 MacBook 上的浏览​​器缓存
  5. AudioSwitcher for mac(音频控制工具)v3.08 版本支持M1芯片
  6. Mindomo Desktop for Mac(思维导图)中文版
  7. 苹果公布 macOS Monterey 兼容机型列表
  8. 如何让Tuxera NTFS总是挂载不干净的卷?
  9. 如何用EasyRecovery找回删除的文档(附注册机下载地址)
  10. amazon aws ip check