集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Python >

成都python培训:Python编程5年后,我转向了Go

发布者: 成都达内     浏览次数:     发布时间:2019-03-27 10:08:48

作为如今火了半边天的动态语言 Python ,凭借着较强的灵活性、可移植、可扩展等特性广受开发者喜爱。但是和 Google 的第二款开源编程语言 Go 相比,Python 的性能完全处于较弱一方。...

  成都python培训:Python编程5年后,我转向了Go

  作为如今火了半边天的动态语言 Python ,凭借着较强的灵活性、可移植、可扩展等特性广受开发者喜爱。但是和 Google 的第二款开源编程语言 Go 相比,Python 的性能完全处于较弱一方。

  在此局面下,“弃 Python 而拥抱 Go”的言论不绝于耳,但是我们究竟该怎么做才能迁移成功?其中又有哪些值得关注的点?在本文中,作者不论语言好坏,只谈从 Python 到 Go 的经验分享,希望对大家有所裨益。

  我喜欢Python。在过去的五年里,它一直是我的首选语言。Python非常友好并且易于学习,同时还保持着超级的效率。

  从创建简单的脚本和Web开发,到数据可视化和机器学习,你几乎可以随时使用它。

  但随着Go的逐渐成熟、强大的用户基础,以及越来越多的公司在经过成功的基准测试后决定转向Go的事实,使我更加广泛地阅读了Go,同时思考如何将其添加到我的工具集中并将它的好处应用到我的工作当中。

  成都python培训

  这篇文章不会讨论Python或Go哪种编程语言更好,线上有很多关于这个主题的帖子和比较,而且我认为这种问题在很大程度上取决于项目。

  在这篇文章中,我将告诉你我从Python到Go的旅程,并为你提供一些技巧,让你了解一些帮助我在这次旅程中取得成功的资源。

  我遇到的主要差异

  当然,作为第一步,我浏览了令人叹为观止的官方“Tour Of Go”,这确实让我有了良好的关于Go语法的基础知识。

  为了加强这些知识,我阅读了电子书Go for Python Programmers,这使我能够继续下一步,尝试和失败,我认为这是最具教育意义的。

  我使用了以前在Python中使用的常用函数,如JSON序列化或使用HTTP调用,并尝试在Go中编写它们。

  通过在Go中应用来自Python中的类似概念,同时仍然包含语言的静态特性,我遇到了Go和Python之间的一些关键性的差异。

  1.项目布局

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

  Go使用“标准”布局,这种布局稍微复杂一点,这使得增加了更多的工作,但好处是拥有结构良好的代码基础。这种代码基础鼓励模块化代码,并在项目规模扩大时仍能保持有序性。

  官方的“How to Write Go Code”有一个部分可以解释如何构建你的工作区。

  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 <- 42

  }()

  // read from channel

  <-ch

  }

  成都python培训

  有关更多示例,请查看Hootsuite real life implementation,或者查看这个,一个来自ArdanLabs的优秀解释。

  4.使用JSON

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

  在Python中,反序列化JSON对象非常简单,只需使用json.loads就可以了!

  但是在Go中,作为一种静态类型语言,这种简单的操作可能会更复杂。

  在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编码,你可以查看这篇文章,或使用“Go By Example”,“Go By Example”是你将拥有的终极备忘资源。

  太懒了,不愿意把你的JSON转换成Go结构?没问题 - 这个工具会帮你做。

  5.清洁的代码

  Go编译器将始终尽力保持代码清洁。

  Go编译器将未使用的变量视为编译错误,而且,Go采用了独特的方法让机器处理大多数格式问题。

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

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

  包含Go格式信息的必读文档是“Effective Go”。

  Python编程5年后,我转向了Go

  我的旅程还在继续

  找到合适的库和框架

  我真的习惯了我的Python框架和库,如Flask,Jinja2,Requests还有Kazoo,我真的很担心我找不到一个适合Go的。

  但是你可以猜到,Go这个伟大的社区拥有自己独特的库,甚至可以让你完全忘记以前的库。

  以下是我的一些偏好-

  Python Requests => net / http

  内置的net / http 提供了非常棒的HTTP客户端和服务器实现,而且非常易于使用。

  Flask + Jinja2=> Gin

  Gin是一个HTTP Web框架,其中包含非常简单的API - 路径中的参数,上传文件,分组路径(/ api / v1,/ api / v2),自定义日志格式,服务静态文件,HTML转化以及功能强大的自定义中间件。

  可以看看这个benchmark。

  CLI Creation=> Cobra

  Cobra是一个用于创建功能强大的CLI应用程序的库,同时也是用于生成应用程序和命令文件的程序。

  最广泛使用的Go项目中许多都是使用Cobra构建的,包括Kubernetes、etcd还有OpenShift。

  我强烈推荐的其他一些库是:Viper,Gonfig还有Awsome-Go。

  其他资源

  以下是一些其他的资源,这些资源在我的Go之旅中能够显著的帮助到我。

  Francesc Campoy- 你肯定需要查看他的YouTube频道和GitHub资料。

  Francesc也有一些很多伟大的工作,例如Go Tooling in Action和Web Applications Workshop。

  GopherCon Videos(需科学上网)

  Go Web Examples()

  Golang Weekly, Gopher Academy, Golang News的 Twitter账户(需科学上网)。

  成都python培训:Python编程5年后,我转向了Go

  总结

  作为一名使用五年Python的狂热分子,我担心过渡到Go会很痛苦。

  但我真的很兴奋,看到有一个真正强大的社区,能够贡献和维护优秀的资源。这样的社区可以帮助你顺利过渡到Go。

  Go是当今发展最快的编程语言之一,我希望将来Go能够成为Google编写云应用程序和基础架构的首选语言。

  对Go来说这是一个激动人心的时刻,我鼓励大家去看看,并且成为Gophers!

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:绵阳市涪城区临园路东段68号富临大都会7栋3单元9层12号

联系电话:15023458194

公交路线:富乐路口凯德广场(10路;29路;3路;15路;11路;15a路;71路)

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市人民南路一段86号“城市之心”大厦26楼

联系电话:15023458194

公交路线:成都市人民南路(6路;14路;42路;72路;76路;1010路;)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56