作者 | Elad Leev
译者 | 姜松浩
责编 | 屠敏
出品 | CSDN(ID:CSDNNews)
以下为译文:
我喜欢Python。在过去的五年里,它一直是我的首选语言。Python非常友好并且易于学习,同时还保持着超级的效率。
从创建简单的脚本和Web开发,到数据可视化和机器学习,你几乎可以随时使用它。
但随着Go的逐渐成熟、强大的用户基础,以及越来越多的公司在经过成功的基准测试后决定转向Go的事实,使我更加广泛地阅读了Go,同时思考如何将其添加到我的工具集中并将它的好处应用到我的工作当中。
这篇文章不会讨论Python或Go哪种编程语言更好,线上有很多关于这个主题的帖子和比较,而且我认为这种问题在很大程度上取决于项目。
在这篇文章中,我将告诉你我从Python到Go的旅程,并为你提供一些技巧,让你了解一些帮助我在这次旅程中取得成功的资源。
我遇到的主要差异当然,作为第一步,我浏览了令人叹为观止的官方“Tour Of Go”(https://tour.golang.org/welcome/),这确实让我有了良好的关于Go语法的基础知识。
为了加强这些知识,我阅读了电子书Go for Python Programmers(https://golang-for-python-programmers.readthedocs.io/),这使我能够继续下一步,尝试和失败,我认为这是最具教育意义的。
我使用了以前在Python中使用的常用函数,如JSON序列化或使用HTTP调用,并尝试在Go中编写它们。
通过在Go中应用来自Python中的类似概念,同时仍然包含语言的静态特性,我遇到了Go和Python之间的一些关键性的差异。
1.项目布局
首先,Python典型的不需要特定的目录层次结构,而Go则另外需要。
Go使用“标准”布局,这种布局稍微复杂一点,这使得增加了更多的工作,但好处是拥有结构良好的代码基础。这种代码基础鼓励模块化代码,并在项目规模扩大时仍能保持有序性。
官方的“How to Write Go Code”(https://golang.org/doc/code.html)有一个部分可以解释如何构建你的工作区。
2.静态和强类型
Go是一种静态类型的语言,由于你习惯使用Python或Ruby等动态类型语言,因此最初会让你感到不舒服。
毫无疑问,动态语言更容易出错,并且在输入验证方面需要花费更多精力来防止常见语法错误或解析错误。思考一个函数,他是计算两个整数之和的函数,但实际上你并不能保证使用此函数的用户不会将字符串传递给函数,因此这就会导致TypeError。
这种情况不会发生在Go中,因为你需要声明每个变量的类型,也就是说你的函数可以获得哪种类型的变量,以及函数将返回哪种类型的变量。
起初它有点烦人,感觉它让我的编码速度慢了很多,但是在很短的时间的阅读和编写Go的代码后,你发现已经习惯它了,它实际上可以节省时间,并使你的代码更加的鲁棒。
3.天生的并发性
Go具有天生的并发特性它支持使用goroutines和channel,这些可以使并发非常的方便。
首先,channel的概念可能有点棘手,并且很容易将其视为某种数据结构或排队实现。但是,经过一些阅读后,它们变得更加直白,你可以真正享受它们带来的价值,并充分利用它们。
如下是,一个简单的可视化的goroutines和channel:
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 Gin Gin是一个HTTP Web框架,其中包含非常简单的API - 路径中的参数,上传文件,分组路径(/ api / v1,/ api / v2),自定义日志格式,服务静态文件,HTML转化以及功能强大的自定义中间件。
可以看看这个benchmark(https://github.com/gin-gonic/gin/blob/master/BENCHMARKS.md)。
CLI Creation=> Cobra
Cobra是一个用于创建功能强大的CLI应用程序的库,同时也是用于生成应用程序和命令文件的程序。
最广泛使用的Go项目中许多都是使用Cobra构建的,包括Kubernetes、etcd还有OpenShift。
我强烈推荐的其他一些库是:Viper,Gonfig还有Awsome-Go。
其他资源
以下是一些其他的资源,这些资源在我的Go之旅中能够显著的帮助到我。
-
Francesc Campoy(https://twitter.com/francesc)- 你肯定需要查看他的YouTube频道和GitHub资料(https://github.com/campoy)。
Francesc也有一些很多伟大的工作,例如Go Tooling in Action(https://github.com/campoy/go-tooling-workshop)和Web Applications Workshop(https://github.com/campoy/go-web-workshop)。
-
GopherCon Videos(https://www.youtube.com/channel/UCx9QVEApa5BKLw9r8cnOFEA/playlists,需科学上网)
-
Go Web Examples(https://gowebexamples.com/)
-
Golang Weekly(https://twitter.com/golangweekly), Gopher Academy(https://twitter.com/GopherAcademy), Golang News(https://twitter.com/golangnews)的 Twitter账户(需科学上网)。
总结
作为一名使用五年Python的狂热分子,我担心过渡到Go会很痛苦。
但我真的很兴奋,看到有一个真正强大的社区,能够贡献和维护优秀的资源。这样的社区可以帮助你顺利过渡到Go。
Go是当今发展最快的编程语言之一,我希望将来Go能够成为Google编写云应用程序和基础架构的首选语言。
对Go来说这是一个激动人心的时刻,我鼓励大家去看看,并且成为Gophers!
原文:https://medium.com/appsflyer/my-journey-from-python-to-go-3859783c6b3c
本文为 CSDN 翻译,如需转载,请注明来源出处。作者独立观点,不代表 CSDN 立场。