全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2019-03-25_使用 Python 5 年后,我转向了Go

您的位置:首页 >> 新闻 >> 行业资讯

使用 Python 5 年后,我转向了Go 作者 | Elad Leev 译者 | 杨雷 编辑 | Vincent AI 前线导读:Elad Leev 作为 AppsFlyer 的一名 DevOps 的程序员,通过这篇文章解释了作为一名 5 年 Python 程序员是如何转化为 Go 的粉丝的。他解释了 Python 和 Go 在实际应用中的一些关键性差异,例如类型、并发、JSON 的使用等,并推荐了若干 Go 相关的资源供初学者参考学习。 更多优质内容请关注微信公众号“AI 前线”(ID:ai-front) 我喜欢 Python,在过去的五年里,它一直是我的首选语言。Python 非常友好且易于学习,迄今仍然超级有效。 几乎可以用它来做任何事情 -- 从创建简单的脚本,Web 开发,到数据可视化以及机器学习。 但随着 Go 日趋成熟,强大的用户群,事实上越来越多的公司在成功进行基准测试后决定 转向 Go,驱使我阅读了大量 Go 相关的知识,思考如何将其添加到我的工具集以便在工作中应用它的好处。 这篇文章不会讨论哪种编程语言更好 -- Python 或 Go,网络上有很多关于这个主题的帖子和比较,在我看来区别在很大程度上取决于用例。 在这篇文章中,我将告诉你我从 Python 到 Go 的旅程,并提供一些技巧,让你了解一些帮助我在这次旅程中取得成功的资源,然后现场讲述这个故事。 遇到的主要差异 自然,作为第一步,我浏览了令人惊叹的官方“ Tour Of Go ”,这肯定给了我关于 Go 语法的强大基础知识。 为了加强这些知识,我阅读了 Go for Python Programmers 这本电子书,使我能够继续下一步,我认为这是最具教育意义的尝试和失败。 我使用了以前在 Python 中常用的函数,如 JSON 序列化或 HTTP 调用,并尝试在 Go 中编写它们。 通过这样在 Go 中应用 Python 中的类似概念,并且仍然保持语言的静态特性,我遇到了 Go 和 Python 之间的一些关键差异。 项目布局 首先,Python 通常不需要特定的目录层次结构,反之,Go 则需要。 Go 使用“标准”布局,这让它比 Python 稍微复杂一点,带来了更多工作,但好处是结构良好的代码库,它鼓励模块化代码,在项目规模扩大时能保持有序。 官方的文章“ 如何编写 Go 代码 ”有一个章节清晰地解释了如何构建 工作区。 静态和强类型 Go 是一种静态类型的语言,由于大家习惯使用 Python 或 Ruby 等动态类型语言,因此初期会感到不太舒服。 毫无疑问,动态语言更容易出错,并且在输入的验证上需要花费更多精力来防止常见语法或解析错误。想想计算两个整数之和的某函数,实际上并不能保证用户在使用它时不会将一个字符串传递给函数 -- 这会导致一个 TypeError。 这种情况 不会发生 在 Go 中,因为需要声明每个变量的类型,函数可以获得哪种类型的变量,以及函数将返回哪种类型的变量。 起初它有点烦人,感觉让编码速度慢了很多,但是通过短暂的 Go 学习和编写后,你会真正地习惯去用它,并发现实际上它能节省时间、让代码更健壮。 本机并发 Go 利用 goroutines 和 channels 支持本机并发,现在真的很方便。 首先,channels 的概念可能有点小麻烦,并且很容易被当成某种数据结构或排队的实现。其实了解下来这些概念更加直白,可以真正享受它们带来的价值,并进行充分的利用。 Ivan Daniluk 对 goroutines 和 channels 进行了简单的可视化: 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 } 更多相关示例,请查看 goutoutines,channels 和 select 语句的 Hootsuite 现实生活实现:http://code.hootsuite.com/golang-routines-and-channels/ 或 ArdanLabs 的解释:https://www.ardanlabs.com/blog/2017/10/the-behavior-of-channels.html 使用 JSON 在 Go 里面,不再使用 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 ”,这是可以找到的作为备忘单的最终资源。 如果太懒而不想把 JSON 转换成 Go 结构?没问题 --? 这个工具 可以帮你。 清洁代码 Go 编译器始终尽力保持代码的清洁,将未使用的变量视为编译错误。而且,Go 采用了独特的方法让计算机能处理大多数格式问题。在保存或编译时 Go 会运行 gofmt 的程序,它会处理大多数的格式问题。 如果不关心其中的一个变量?没问题!只需使用 _(下划线)并将其分配给空标识符即可。 包含 Go 的格式信息的必读文档是“ Effective Go”。 找到合适的库和框架 我真的习惯了 Python 框架和库,如 Flask,Jinja2,Requests 甚至 Kazoo,我真的很担心找不到适合 Go 的。但是可以猜到,Go 这个伟大的社区拥有自己独特的库,甚至可以让你完全忘记旧的喜好是什么。 以下是一些个人偏好 : Python Requests =net/http内置的 net/http 提供了 HTTP 客户端和服务器,实现得非常棒且非常易用性好。 Flask + Jinja2 = GinGin 是一个 HTTP Web 框架,具有非常简单的 API -- 路径参数,上传文件,分组路由(/api/v1 ,/api/v2),自定义日志格式,提供静态文件,HTML 渲染,真正强大的自定义中间件。这里 提供了 benchmark 参考。 CLI Creation= CobraCobra 库可用来创建功能强大的 CLI 应用,还提供了生成应用和命令文件的程序。许多广泛使用的 Go 项目都是使用 Cobra 构建的,包括 Kubernetes,etcd 和 OpenShift。 强烈推荐的一些其他的库是:Viper,Gonfig 和一个很棒的列表 --? Awsome-Go。 其他资源 在我的 Go 之旅中,下面是一些起到了极大帮助的资源: [1] Francesc Campoy,https://twitter.com/francesc ?-- 一定 要看看他的 YouTube 频道 和 GitHub 个人资料。Francesc 还组织了一些伟大的研讨会 -?- Go Tooling in Action 和 Web Applications Workshop。 [2] GopherCon 视频:https://www.youtube.com/channel/UCx9QVEApa5BKLw9r8cnOFEA/playlists [3] Go Web Examples:https://gowebexamples.com/ [4] 几个 Twitter 账户:Golang Weekly(https://twitter.com/golangweekly),Gopher Academy(https://twitter.com/GopherAcademy),Golang News(https://twitter.com/golangnews)。 总 结 作为一名五年狂热的 Python 用户,我担心过渡到 Go 会很痛苦。但我真的很兴奋,看到有一个真正强大的社区,贡献率和维护都很优秀的资源,可以帮助大家顺利过渡到 Go。Go 是当今发展最快的编程语言之一,希望 Google 能够好好管理,让 Go 成为编写云应用和基础架构的首选 语言。 目前对 Go 来说是一个激动人心的时刻,鼓励大家都来学习并成为 Gophers! 原文链接: https://medium.com/appsflyer/my-journey-from-python-to-go-3859783c6b3c 你也「在看」吗???

上一篇:2022-05-20_「转」语音评测技术在古文背诵中的应用 下一篇:2024-06-27_「转」天弘基金:AI Agent在金融场景下的创新与应用实践

TAG标签:

17
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价