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

2020-01-28 12:39:16于海丽

前言

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/)中的一小段代码:


package main
type openWeatherMap struct{}

func (w openWeatherMap) temperature(city string) (float64, error) {
 resp, err := http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=YOUR_API_KEY&q=" + city)
 if err != nil {
 return 0, err
 }

 defer resp.Body.Close()

 var d struct {
 Main struct {
 Kelvin float64 `json:"temp"`
 } `json:"main"`
 }

 if err := json.NewDecoder(resp.Body).Decode(&d); err != nil {
 return 0, err
 }

 log.Printf("openWeatherMap: %s: %.2f", city, d.Main.Kelvin)
 return d.Main.Kelvin, nil
}

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

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

在代码初始化时,使用 MetaClasses 自行注册类别 置换真假 添加函数到内置函数列表中 通过奇妙的方法重载运算符

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