我放弃Python转Go语言的9大理由 | 附优秀书籍推荐

Go大概2009年面世以来,已经8年了,也算是8年抗战。在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer、k8s等,很多的大公司也在用,比如google(作为开发Go语言的公司,当仁不让)、Facebook、腾讯、百度、阿里、京东、小米以及360,当然除了以上提到的,还有很多公司也都开始尝试Golang,这其中是什么原因呢?让我们来一起分析分析。

原因 1:性能

Go 极其地快。其性能与 Java 或 C++相似。在我们的使用中,Go 一般比 Python 要快 30 倍。

以下是 Go 与 Java 之间的基准比较:

原因 2:语言性能很重要

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

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

原因 3:开发者效率&不要过于创新

看一下绝佳的入门教程《开始学习 Go 语言》(http://howistart.org/posts/go/1/)中的一小段代码:

  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.    }

  16.    log.Printf('openWeatherMap: %s: %.2f', city, d.Main.Kelvin)

  17.    return d.Main.Kelvin, nil}

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

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

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

  • 置换真假

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

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

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

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

注意:当然如何容易还是要取决于你的使用案例。如果你要创建一个基本的 CRUD API,我还是建议你使用 Django + DRF,或者 Rails。

原因 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 中,开发者必须密切关注异步代码的处理。

并发性的另一个优质特性是竞赛检测器,这使其很容易弄清楚异步代码中是否存在竞态条件。下面是一些上手 Go 和通道的很好的资源:

  • https://gobyexample.com/channels

  • https://tour.golang.org/concurrency/2

  • http://guzalexander.com/2013/12/06/golang-channels-tutorial.html

  • https://www.golang-book.com/books/intro/10

  • https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html

原因 5:快速的编译时间

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

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:强大的生态系统

Go 有着强大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。

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

原因 8:GOFMT,强制代码格式

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

原因 9:gRPC 和 Protocol Buffers

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

对每位程序员来说,不管哪种语言,“学的扎实,能学以致用”才是王道!本文就为对 Go 语言感兴趣的朋友们提供一些口碑不错的学习书籍建议。

《Go语言学习笔记》

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

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

《Go语言实战》

作者:Thierry Schellenbach

(0)

相关推荐

  • 人生苦短,我要换Go!

    新智元报道 来源:ycombinator 编辑:QJP [新智元导读]码农常说,「人生苦短,我用Pyhon」,但在过去的几年里,又有一种编程语言开始流行起来,它就是GoLang,没什么比一门新的编程语 ...

  • 你真的了解Python吗?这些必须知道

    虽然大家都知道Python是一门编程语言,但很多人对它了解的并不是很透彻,接下来小编通过这篇文章为大家介绍一下,希望对你有所帮助. 什么是Python? Python是一种解释型.面向对象.动态数据类 ...

  • 学到了:goroutine 可能使程序变慢

    如何使用 goroutine 才能使你的 CPU 满负载运行呢 下面,我们将会展示一个关于 for 循环的代码,将输入分成几个序列添加到 Goroutines 里面!我敢打赌你之前可能有过几次这种情况 ...

  • python和GO哪个更合适机器学习?

    GO语言和python语言都是大家比较偏爱的编程语言,很多人在转行的时候都会考虑GO语言和python,那么想要从业机器学习,python和GO哪个更合适? python是发展最快的编程语言之一,py ...

  • Golang vs Python:选哪个?

    Go语言中文网 2021-09-23 对开源开发来说 Golang 和 Python 哪个语言更好,我们详细分析对比一下. 在任何项目开始之前,大多开发团队需要通过多次会议讨论来确定最适合他们项目的编 ...

  • Python与R语言哪个更适合数据分析?

    R语言和Python都是非常适合数据分析领域的编程语言,那么这两门语言哪个更合适呢?我们一起来分析一下吧. Python与R语言的共同点: Python和R在数据分析和数据挖掘方面都有比较专业和全面的 ...

  • Python属于什么语言?0基础必看!

    关于Python是什么类型的语言,很多人都搞不清楚,有的人说它是开源的编程语言,也有的人说它是面向对象的编程语言,接下来小编通过这篇文章为大家解答一下. 先来了解一下Python.Python是FLO ...

  • Python和C语言哪个好学?

    现在编程是很多人都比较关注的,越来越多的人都想要学习编程语言,主流的编程语言有python.C.Java等,其中很多人经常将python和C语言对比,这两个语言学习哪个好? 为什么说应该从C语言入门学 ...

  • 【视频】Python和R语言使用指数加权平均(EWMA),ARIMA自回归移动平均模型预测时间序列

    原文链接:http://tecdat.cn/?p=21773 视频: 在Python和R语言中建立EWMA,ARIMA模型预测时间序列 概述 学习创建时间序列预测的步骤 关注Dickey-Fuller ...

  • Python和GO语言哪个简单?小白必看!

    Python和GO语言都是用于编写web应用程序强大而且高级的编程语言,拥有广泛的领域以及前景,那么它们之间有什么区别吗?下面小编就带大家了解一下Python和GO语言. 什么是Python?Pyth ...

  • Python和C语言有何区别?入门分享!

    在众多编程语言之中,想必很多人都听说过Python和C语言,在进行编程学习之前,大家都会问:python和c语言的区别有哪些?我该如何选择?接下来我们来看看吧. Python可以说是目前最火的语言之一 ...

  • Python和C语言区别!入门分享

    初学编程语言的时候,大家都会遇到这样的难题,那就是选择语言,尤其是Python和C语言,不少人在它们之间犯了难,不知道如何选择,那么到底Python和C语言哪个更难呢?我们一起来看看吧. 答案是C语言 ...

  • Python是什么语言?Python入门

    Python,大家都知道是一门编程语言,也知道这门语言适合零基础学习,但是Python到底是什么呢?涉及哪些领域?你都知道吗?今天为大家详细介绍一下. 什么是Python? Python是一种计算机程 ...

  • Python和C++语言有何区别?

    人工智能是当下非常热门的领域,随着社会的发展以及提升,人工智能技术的提升不仅为企业带来效率,也为我们带来便利的生活.现在适用于人工智能的编程语言有很多,其中python和C++最为常见,那么它们有何优 ...