IP Address:34.238.248.103



项目 开发语言的选择一般会以项目需求为依据,而转换使用另一种开发语言则需要更大的决心,特别是开发团队已经熟悉了某种开发语言之后。现在越来越多的开发团队将项目的开发语言从 Python 转换成 Go,因为他们发现 Python 除了在几个特定领域具有一定优势外,Go 语言则具有更为出色的表现。

以下就是从 Python 转成 Go 的几个理由。

理由1、性能

Go 语言执行起来非常快,其性能与 C 或 C++ 语言相当,执行速度大概是 Python 语言的几十倍。

对于大多应用来讲,程序开发语言只是应用和数据库之间的粘合剂,语言自身的性能就显得不那么重要。

Python是一门很棒的语言,但是对于诸如序列化/反序列化、排名和聚合之类的用例,其性能却相当缓慢。开发人员经常遇到其性能问题,Python将比 Go 花费更多时间来处理对象。

理由2、开发效率

以下面的代码为例:

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
}

对于一个 Go 语言的新手来说,读懂上面的代码段也毫不费力。虽然代码段包含了多重赋值、结构体、指针、格式化输出以及 Go 标准 HTTP 库等多种类型。

Python 语言因为其灵活性深受用户欢迎,因为它可以:

  • 在代码初始化时使用MetaClasses自注册类
  • 交换真与假
  • 将功能添加到内置功能列表中
  • 通过魔术方法重载运算符

这些功能当然很有趣,但是,正如大多数程序员一致认可的那样。当阅读别人的作品时,这些灵活性通常会使代码更难于理解。

Go 语言则相对呆板的多,它强制要求按基本编码规则编写代码。这样的好处就是在阅读别人的代码时,可以轻松了解程序意图。

理由3、并发和通道

作为一种语言,Go 尝试使事情保持简单,因此,它没有引入很多新概念,将重点在聚焦于创建一种简单的语言。Go 最具有创新性的领域是 goroutines 和 通道。Goroutines 是 Go 的轻量级线程方法,通道是 goroutine 之间进行通信的首选方式。

Goroutines 创建起来非常廉价,仅占用几 KB 的额外内存。由于 Goroutine 如此轻巧,因此才有可能同时运行数百甚至数千个Goroutine。

应用可以使用通道在 goroutine 之间进行通信, Go 运行时环境处理所有的复杂性。基于 goroutines 和基于通道的并发方法使使用所有可用的 CPU 内核和处理并发 IO 非常容易,所有这些都不会使开发复杂化。与 Python / Java 相比,在 goroutine 上运行函数需要最少的样板代码。只需在函数调用之前添加关键字”go”:

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }

}

func main() {
    go say("world")
    say("hello")
}

可以看到,Go 的并发实现起来非常容易。与Node相比,这是一种有趣的方法,在Node中,开发人员必须密切注意异步代码的处理方式。

Go中并发的另一个重要方面是竞争检测器,这使开发人员很容易确定异步代码中是否存在竞争条件。

理由4、编译迅速

Go 语言以其出色的编译速度著称,与以编译缓慢而闻名的 Java 和 C ++ 相比,Go 的快速编译时间就意味着生产力的提升。我们沉迷于程序开发,但也需要在第一时间了解代码最终的执行效果。

理由5、Gofmt 强制格式化代码

Gofmt 是一个很棒的命令行实用程序,内置在Go编译器中,用于格式化代码。在功能方面,它与 Python 的 autopep8非常相似。保持格式一致很重要,但是实际的格式化标准并没有多大关系。 Gofmt通过采用一种正式的方式来格式化代码来避免所有关于代码格式的讨论。

理由6、gRPC 和协议缓冲

Go 对协议缓冲区和 gRPC 提供了一流的支持。这两个工具可以很好地协同工作,以构建需要通过 RPC 进行通信的微服务。程序员只需要编写清单即可定义用于进行的 RPC 调用以及它们采用的参数。然后,服务器和客户端代码都将从此清单自动生成。这样产生的代码既快速,又具有很小的网络占用空间,并且易于使用。

从同一清单中,程序员甚至可以为许多不同的语言生成客户端代码,例如 C ++、Java、Python和Ruby。因此,不再有用于内部流量的模棱两可的 REST 端点,也不必每次都编写几乎相同的客户端和服务器代码。

发表评论

电子邮件地址不会被公开。 必填项已用*标注