前言
Python是一个非常受欢迎的语言。但在企业世界中,能打的go并没有给人任何生存的机会。
如果你明白了这句话的意思,那么你可能已经尝试过或者看过Go编程语言。我认为它是最简单的编程语言,可以适用于任何类型的应用程序开发。
是的!你没看错,对我来说go比JavaScript还好学。我认为这是go语言在几年之内变得如此流行的主要原因。
下面我们对比一下Python和Go。
那么我们在使用Go之前有什么
这是我们的Python技术堆栈:
- Dashboard前端的response .js
- Django Python用于仪表板后端+身份验证服务
- 用于API服务的Node.js
- PostgreSQL用于数据库,Cassandra用于日志记录
- 自定义书面集装箱注册与Rust语言
正如您所看到的,整个基础设施是完全基于微服务的,大部分逻辑完全分离,甚至使用不同的技术。
这就是我们开始考虑将API服务和后端合并到单个项目中的主要原因,因为它们有很多相似之处,但是代码库在多种编程语言和技术上是重复的。但是我们需要做很多工作来定制Django的API服务,特别是定制JSON响应。
为什么使用Go
正如之前所说,Go语言是我所见过和使用过的最简单的语言。但这只是吸引我的第一点。
这里是我们选择Go而不是Python Django的5个主要原因
1. 它编译成单个二进制文件
Golang是作为一种编译语言构建的,谷歌开发人员在这方面做得很好。使用静态链接,实际上是将所有依赖库和模块结合到一个基于操作系统类型和体系结构的二进制文件中。这意味着如果你在你的笔记本电脑上用Linux X86 CPU编译你的后端应用程序,你只需要把编译好的二进制文件上传到服务器上,它就会工作,而不需要在那里安装任何依赖项!
2. 静态类型系统
类型系统对于大规模应用程序非常重要。Python是一门伟大而有趣的语言,但有时你会遇到不寻常的异常,因为你试图把变量当作整数来使用,结果却发现它是一个字符串。
- # Django will crash process because of this
- def some_view(request):
- user_id = request.POST.get('id', 0)
- # If this post request has "id" parameter then
- # user_id would be a string,
- # but you really thinking it is integer
- User.objects.get(id=user_id)
Go会在编译时作为编译器错误让您知道这个问题。这是你赢得时间的地方。
3. 性能!
这可能令人惊讶,但在大多数应用程序中,Go比Python(2和3)要快。
在我们的案例中,由于Go的并发模型和CPU可伸缩性,他的性能更好。每当我们需要处理一些内部请求时,我们就用单独的Goroutine来处理它,它在资源上比Python线程便宜10倍。因此,我们节省了大量的资源(内存、CPU),因为语言的内置特性。
4. 你不需要网络框架
这是编程语言最棒的地方。Go语言的创造者和社区已经构建了许多由语言核心支持的工具,在大多数情况下,你真的不需要任何第三方库。例如,它有http、json、html模板是用本地语言构建的,你可以构建非常复杂的API服务,甚至不需要在Github上查找库!
但是,当然有很多为Go构建的库和框架,以及使用Go构建web应用程序,但是我建议在不使用任何第三方库的情况下构建web应用程序或API服务,因为在大多数情况下,它们并不比使用本地包更容易。
5. 伟大的IDE支持和调试
当您试图切换编程语言时,IDE支持是最重要的事情之一。舒适的IDE平均可以节省80%的编码时间。我发现了JetBrains IDEA的Go插件,它也支持(Webstorm, PHPStorm等)。这个插件提供了项目开发所需的一切,利用JetBrains的强大功能,您可以真正促进开发。
根据我们的代码库统计,在重写所有要运行的项目之后,我们得到的代码比以前少了64%。
结论
Go为我们提供了巨大的灵活性,为所有的用例提供了单一的语言,并且对所有的用例都非常有效。我们的后端和API服务的性能提高了30%。现在我们可以实时处理日志记录,将其传输到数据库,并使用Websocket从单个或多个服务进行流处理!这是Go语言特性的一个很好的结果。
英文原文:
https://medium.com/hackernoon/5-reasons-why-we-switched-from-python-to-go-4414d5f42690