从Python转向Go编程语言背后的九个原因以及如何转换
Stream团队的主要编程语言从Python转向Go。本文解释了其背后的九个原因以及如何进行转换。 为什么使用Go 原因1:性能
它运行速度非常快。其性能与Java或C++类似。在我们的使用中,Go 通常比 Python 快 30 倍。以下是 Go 和 Java 之间的基准比较:![编程语言从 Python 转向 Go 背后九大原因和如何转换]()
![编程语言从 Python 转向 Go 背后九大原因和如何转换]()
![编程语言从 Python 转向 Go 背后九大原因和如何转换]()
原因 2:语言技能很重要 对于许多应用程序来说,编程语言就像你和数据集之间的粘合剂。语言的显示往往毫无意义。但 Stream 是一家 API 提供商,为财富 500 强和超过 2 亿终端用户提供服务。多年来我们改进了 Cassandra、PostgreSQL、Redis 等,但最终我们达到了我们所使用的语言的极限。 Python 相当不错,但在序列化/反序列化、排序和收集方面却很糟糕。我们经常面临这样的问题:Cassandra需要1ms才能返回数据,而Python需要10ms才能将其转换为对象。原因 3:开发者成功且不要更新太多查看优秀的入门教程中的一小段代码《开始学习 Go 语言》 (http://howistart.org/posts/go/1/):
如果您是新人,看到这段代码你不会感到惊讶。它提供了各种角色、数据结构、指针、格式和内置 HTTP 库。当我第一次开始编程时,我喜欢使用 Python 的更高级功能。 Python 允许您创造性地使用您编写的代码。例如,您可以:
与必须密切关注管理异步代码的 Node 相比,并发方法非常容易上手且有趣。并发的另一个重要功能是竞争检测器,它可以轻松地找出异步代码中是否存在竞争条件。以下是一些开始使用 Go 和通道的重要资源:
在 Go 之前编译代码的 6 个理由:构建团队能力 首先,最明显的一点是:Go 的开发人员比 C++ 和 Java 等老语言要少。据了解,38%的开发者了解Java,19.3%了解C++,只有4.6%了解Go。GitHub 数据显示了类似的趋势:Go 比 Erlang、Scala 和 Elixir 更流行,但不与 Java 和 C++ 相比。幸运的是,Go 非常简单易学。它只提供基本功能,没有任何装饰。 Go 引入的新概念是“延迟”语句以及带有 goroutine 和管道的内置并发管理。由于 Go 的简单性,任何 Python、Elixir、C++、Scala 或 Java 开发人员都可以在一个月内创建一个成功的 Go 团队。原因 7:强大的生态系统 对于这种规模的团队(约 20 人)来说,生态系统非常重要。如果您必须重做所有功能,您将无法为客户带来收入。 Go 拥有强大的硬件支持以及针对 Redis、RabbitMQ、PostgreSQL、模板定义、作业调度、表达式分发和 RocksDB 的内置库。 Go 的环境比 Rust 和 Elixir 等语言具有显着的优势。当然,它比 Java、Python 或 Node 这样的语言稍逊一筹,但它非常稳定,而且你会发现已经有很多基本需求的高级包了。理由8:GOFMT,代码格式压缩 Gofmt是Go编译器内置的一个强大的命令行,用于确定代码格式。基本上,它类似于Python的autopep8。合规设计很重要,但实际的设计标准并不总是那么重要。 Gofmt 使用一套正式的代码来避免不必要的对话。原因 9:gRPC 和 Protocol Buffers Go 语言对 protocol buffers 和 gRPC 具有一流的支持。这两个工具可以很好地协同工作,用于构建需要与 RPC 通信的微服务。我们只需要编写一条语句来定义 RPC 调用的事件和参数,然后服务器和客户端代码就会根据该事件自动生成。以这种方式生成代码不仅速度快,而且需要最少的网络使用。通过相同的暴露,我们可以使用不同的语言(例如 C++、Java、Python 和 Ruby)创建客户端代码。因此内部连接 RESET 端点没有不同,我们需要编写几乎相同的客户端和服务器代码。使用Go语言的缺点 缺点一:缺乏框架 Go语言缺乏一个主要的框架,比如Ruby的Rails框架,Python的Django框架,或者PHP的Laravel。这是 Go 社区中的一个非常热门的问题,因为许多人认为我们不应该从框架开始。在很多情况下都是如此,但如果您只想构建一个简单的 CRUD API,那么使用 Django/DJRF、Rails Laravel 或 Phoenix 会更容易。缺点2:Go语言的贡献帮助开发者通过简单地从函数返回错误(或返回调用)和预期的调用代码来处理错误。尽管这种方法很有效,但很容易忘记错误发生的位置,从而很难误导用户。错误包可以解决这个问题,它允许我们为返回的错误添加上下文和堆栈。另一个问题是我们可能会忘记错误处理。 errcheck 和 megacheck 等静态分析工具可以防止这些错误。尽管这些解决方案很有效,但它们可能不是正确的方法。缺点三:包管理 Go语言的包管理非常不完善。默认情况下,它无法确定依赖库的版本,或创建可编辑的构建。相比之下,Python、Node 和 Ruby 都有更好的包管理系统。然而,使用正确的工具,Go 语言中的包管理也可以发挥同样的作用。我们可以使用Dep来管理依赖关系,它还可以定义自定义版本。另外,我们还可以使用一个名为VirtualGo的开源工具,它可以轻松管理多个Go语言编写的项目。
Python 与 Go 我们所做的一个有趣的实验是用 Python 编写数字提要,然后用 Go 编写。请参阅以下此排序方法的示例:
Python 和 Go 都需要满足以下要求才能支持上述排序方法:
- 在代码初始化期间使用MetaClass自行注册类
- 替换true和false
- 将函数添加到内部函数列表中
- 与Wonderful的方式太多
- 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
- 删除数字表示。在此示例中,我们希望将字符串 simple_gauss(time)* 转换为一个函数,该函数将事件作为输入并返回一个数字作为输出。
- 在 JSON 配置中创建一些函数。例如,我们希望“simple_gauss”被称为“decay_gauss”,密钥对为“scale”:“5d”,“offset”:“1d”,“decay”:“0.3”。
- 删除“默认”设置,以便在未指定字段时更轻松地进行注释。
- 首先使用步骤 1 中的功能标记源中的所有活动。
- 这个分类代码是我用Go写的第一个项目;
- Go 代码是在 Python 代码之后编写的,所以我明白了;
- Go 语言阅读库质量很好。
作者:机器之心
链接:https://juejin.im/post/59e6f4f151882578d50394fc
'版权的作者。如需商业印刷,请联系作者以获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。