小三阳,Python 编程 5 年后,我转向了 Go!,云服务器

频道:我们的头条 日期: 浏览:187

作为现在火了半边天的动态言语 Python ,凭借着较强问酒谢花的灵活性、可移植哈宝530、可学生赚约请码扩展等特性广受开发者喜爱。可是和 Google 的第二款开源编程言语 Go 比较,Python 的功能彻底处于较弱一方。

在此局势下,“弃 Python 而拥抱 Go”的言辞不绝于耳,可是咱们终究该怎么做才干搬迁成功?其间又有哪些值得重视的点?在本文中,作者不管言语好坏,只谈从 Python 到 Go 的经历共享,期望对我们有所裨益。

作者 | Elad Leev

译者 | 姜松浩

责编 | 屠敏

出品 | CSDN(ID:CSDNNews)

以下为译文:

我喜爱Python。在曩昔的五年里,它一直是我的首选言语。Python十分友爱而且易于学习,一起还坚持着超级的功率。

从创立简略的脚本和Web开发,到数据可视化和机器学习,你简直可以随时使农民杀牛用它。

但随着Go的逐步老练、强壮的用户根底,以及越小三阳,Python 编程 5 年后,我转向了 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中的相似概念,一起依然包含言语的静态特性,我遇到捍卫萝卜应战29了Go和Python之间的一些关键性的差异。

1.项目布局

首要,Python典型的不需求特定的目录层次结构,而Go则别的需求。

Go运用“规范”布局,这种布局稍微利路通航空插头杂乱一点,这使得增加了更多的作业,但优点是具有结构杰出的代码根底。这种代码根底鼓舞模块化代码,并在项目规划扩展时仍能坚持有序性。

官方的“How to Write Go Code”(https://golang.org/doc/code.html)有一个部分可以解说怎么构建你的作业区。

2.静态和强类型

Go是一种静态类型的言语,由于你习气运用Python或Ruby等动态类型言语,因而最初会让你感到不舒服。机甲战役2

毫无疑问,动态言语更简略犯错,而且在输入验证方面需求花费更多精力来防止常见语法过错或解析过错。考虑一个函数,他是核算两个整数之和的函数,但实际上你并不能确保运用此函数的用户不会将字符串传递给函数,因而这就会导致TypeError。

这种状况不会发生在Go中,由于你需求声明每个变量的类型,也就是说你的函数可以获得哪种类型的变量,以及函数将回来哪种类型的变量。

起先它有点烦人,感觉它让我的编码速度慢了许多,可是在很短的时间的阅览和编写Go的代码后,你发现现已习erogen惯它了,它实际上可以节省时间,并使你的代码愈加的鲁棒。

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 <- 42
}()
// read from channel
<-ch
}

有关更多示例,请检查Hootsuite real life implementation(http://code.hootsuite.com/go小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器lang-routines-and-channels/),或许检查这个(https://www.ardanlabs.com/小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器blog/2017/10/the-behavior-of-channe小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器ls.html),一个来自ArdanLabs的优异解说。

4.运用JSON

好吧,不再有json.loads()给你运用。

在Python中,反序列化JSON目标十分简略,只需运用json.loads就可以了!

可是在Go中,作为一种静态类型言语,这种简略的操作或许会更杂乱。

在Go中,你将JSON解析为之前界说的结构。任何不合适结构的字段都将被疏忽,这是一件功德。这可以将其视为两边之间的一种vloger预界说协议。这种办法下,你不需求对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编码,你可以检查这篇文章(https://gobyexampfootfetishtubele.com/json),或运用“Go By Example”(https://gobyexample.com/json),“Go By Example”是你将拥k9lady有的终极备忘资源。

太懒了,不愿意把你的JSON转换成Go结构?没问题 - 这个东西会帮你做(https://mholt.github.io/json-to-go/)。

5.清洁的代码

Go编译器将一直极力坚持代码清洁。

Go编译器将未运用的变量视为编译过错,而且,Go采用了共同的办法让机器处理大多数格局问题。

Go将在保存或编译时运转gofmt程序,它将处理大多数格局问题。

你不关心其间一个变量?再次 - 没问题!只需运用_(下划线)并将其分配给空标识符就可以了。

包含Go格局信息的必读德鲁瓦斯文档小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器是“Effective Go”(https://golang.org/doc/effective_go.html)。

我的旅程还在持续

找到适宜的库和结构

我真的习气了我的Python结构和库,如Flask,Jinja2,Requests还有Kazoo,我真的很忧虑我找不到一个合适Go的。

可是你可以猜到,Go这个巨大的社区具有自己共同的库,乃至可以让你彻底忘掉曾经的库。

以下是我的一些偏好-

  • Python Requests => net / http
  • 内置的net / http 供给了十分棒的HTTP客户端和效劳器实小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器现,而且十分易于运用。
  • Flask + Jinja2=> 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之旅中可以明显的协助到我。

  1. Francesc Campoy(https://twitter.com/francesc)- 你必定需求检查他的YouTube频道和GitHub材料(https://github.com/campoy)。
  2. F奥法重生rancesc也有一些许多巨大的作业,例如Go Tooling in Action(https://github.com/campoy/go-tooling-workshop)和Web Applications Workshop(https://github.com/campoy/go-web-workshop)。
  3. GopherCon Videos(https://www.youtube.com/channel小三阳,Python 编程 5 年后,我转向了 Go!,云效劳器/UCx9QVEApa5BKLw9r8cnOFEA/playlists,需科学上网)
  4. Go Web Examples(https://gowebexamples.com/)
  5. 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编写云运用程序和根底架构的首选言语。

对G男同志69o来说这是一个激动人心的时间,我鼓舞我们去看看,而且成为Gophers!

原文:https://medium.com/appsflyer/my-journey-from-python-to-go-3859783c6b3c

本文为 CSDN 翻译,如需转载,请注明来历出处。作者独立观念,不代表 CSDN 态度。