从Python到Go的我的方式-共享技巧和资源



从翻译 者那里:Ilad Leev为您翻译了一篇有关从Python到Go的过渡的文章 本文不仅对新手程序员有用,而且对以任何方式对Go感兴趣的任何人都将非常有用。

我喜欢Python。 在过去的五年中,这种语言一直是我的最爱。 他友善,高效,易学。 几乎用于所有方面:从创建简单的脚本和Web开发到数据可视化和机器学习

Go的逐渐“成熟”,广大的社区以及在成功的测试后越来越多的公司采用这种语言的事实使我开始关注它并研究文献。 但是这篇文章不是关于哪个更好-Python或Go :网上有很多比较。 我认为,这完全取决于应用程序。 我将谈论为什么选择Go,并为感兴趣的每个人提供一些技巧和指向有用资源的链接。

Skillbox建议: 从零开始的 动手课程Python开发人员

我们提醒您: 对于所有“ Habr”读者来说,使用“ Habr”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。




观察结果


在旅途开始时,我做的第一件事是研究出色的官方Tour Of Go教程。 它提供了对该语言语法的理解。

为了提高我的知识,我还阅读了《 Go for Python Programmers 》一书,该书使我进入了下一个阶段-试验和错误。

我采用了我在Python中使用的常用函数(序列化JSON或使用HTTP调用),并尝试在Go中编写它们。 通过这种直观的比较,我能够确定语言之间的关键差异。

项目布局

首先,Python不需要特定的目录层次结构,而Go则需要。

Go使用“标准”布局,该布局有点复杂,需要更多工作。 另一方面,结果是,我们获得了结构良好的代码库,该代码库使用了模块化结构,并且在扩展项目时,代码仍保持严格的顺序。

官方的“ 如何编写Go代码 ”教程介绍了如何组织您的工作。

静态强类型

Go是静态类型的,它会让那些习惯于使用Python和Ruby之类的动态类型语言的人感到茫然。

毫无疑问,动态语言更容易出错;开发人员在检查输入数据时需要付出更多的努力。 一个示例是计算两个整数之和的函数。 如果将字符串传递给函数(这种情况并不罕见),则会导致TypeError错误。

这在Go中不会发生,因为在这里您需要为每个变量和函数声明一个类型,以及该函数将返回什么类型的变量。

起初这很烦人:在我看来,Go功能正在放缓,但是后来才明白,实际上,声明所有内容可以节省时间并减少出错的可能性。

本机并发

Go具有使用例程和管道的本机并发支持-这很方便。

首先,通道的概念似乎有些混乱。 但是,随着时间的流逝,它变得更加容易理解,您开始享受新的机会并积极与之合作。

这是Ivan Danilyuk所说的一切的可视化。
package main func main() { // create new channel of type int ch := make(chan int) // start new anonymous goroutine go func() { // send 42 to channel ch <- 42 }() // read from channel <-ch } 



这里这里有更多示例。

使用JSON

好了,json.loads()不再了。 在Python中,一切都很简单:我们使用json.loads,没有问题。

但是在Go(一种静态类型的语言)中,此操作变得更加复杂。

在这里,使用JSON时,所有内容都是预定义的。 任何不适合给定结构的字段都将被忽略,这很好。 可以将其视为双方之间预先约定的协议。 您必须使用JSON接收到的数据,并且双方“同意”了字段和JSON类型。
 { “first”: “Elad”, “last”: “Leev”, “location”:”IL”, “id”: “93” } 

 type AccountData struct { First string `json:"first"` Last string `json:"last"` Location string `json:"location"` ID string `json:"id"` } 

当然,您可以在不使用结构的情况下反序列化JSON,但是应尽可能避免这种情况,并应考虑该语言的静态性质。

在这篇文章这里最好解释 GO上的JSON解码。

懒将您的JSON转换为Go结构? 没问题, 此工具将为您做一切

干净的代码

Go编译器将始终尝试保持代码干净。 它将未使用的变量视为编译错误。 Go使用独特的方法,使系统能够解决大多数格式问题。 因此,Go在保存或编译时将运行gofmt程序,并独立更正格式。

您是否关心变量? 好吧 只需使用_(下划线)并将其分配给一个空ID。

使用语言的这一部分的桅杆教程来自“ Effective Go ”中的信息。

找到合适的库和框架

我在Python上使用了框架和库,例如Flask,Jinja2,Requests,甚至在Python上使用了Kazoo,所以我担心找不到适合Go的东西。

但是社区已经解决了这些问题:该语言拥有自己的独特库,使您完全可以忘记以前使用的内容。

这是我的最爱。

Python请求=> net / http

net / http提供了HTTP客户端和服务器的便捷易用的实现。

Flask + Jinja2 =>杜松子酒

Gin是一个HTTP Web框架,具有非常简单的API:路径参数,可下载文件,组路由(/ api / v1,/ api / v2),提供静态文件的自定义日志格式,HTML渲染和功能强大的自定义中间件。
评价基准。

CLI创建=> Cobra

Cobra是用于创建功能强大的CLI应用程序的库,也是用于生成应用程序和批处理文件的程序。
Cobra用于许多大型Go项目中,包括Kubernetes,etcd和OpenShift。

这里是我强烈推荐的其他库: ViperGonfig,这个很棒的清单是Awesome-Go

其他有用的资源


[1] Francesc Campoy-您绝对需要对此YouTube频道GitHub个人资料进行评分。

[2] GopherCon视频

[3] 转到Web示例

[4] Golang周刊Gopher学院Golang新闻-Twitter帐户。

总结一下


作为五年的Python普通用户,我担心Go会很痛苦。

但是没有:Go社区的基础工作可以扩展和补充语言的功能,并提供各种有用的资源来帮助您进行过渡。

Go的发展迅速,我希望Google可以使其成为编写云应用程序和基础架构的主要语言。

立即加入!



Skillbox建议:

Source: https://habr.com/ru/post/zh-CN444866/


All Articles