博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Python 5 年后,我转向了Go
阅读量:5835 次
发布时间:2019-06-18

本文共 2896 字,大约阅读时间需要 9 分钟。

我喜欢Python,在过去的五年里,它一直是我的首选语言。Python非常友好且易于学习,迄今仍然超级有效。

几乎可以用它来做任何事情 – 从创建简单的脚本,Web开发,到数据可视化以及机器学习。

但随着Go日趋成熟,强大的用户群,事实上越来越多的公司在成功进行基准测试后决定,驱使我阅读了大量Go相关的知识,思考如何将其添加到我的工具集以便在工作中应用它的好处。

这篇文章不会讨论哪种编程语言更好 – Python或Go,网络上有很多关于这个主题的帖子和比较,在我看来区别在很大程度上取决于用例。

在这篇文章中,我将告诉你我从Python到Go的旅程,并提供一些技巧,让你了解一些帮助我在这次旅程中取得成功的资源,然后现场讲述这个故事。

\"image\"

正文

遇到的主要差异

自然,作为第一步,我浏览了令人惊叹的官方“  ”,这肯定给了我关于Go语法的强大基础知识。

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

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

通过这样在Go中应用Python中的类似概念,并且仍然保持语言的静态特性,我遇到了Go和Python之间的一些关键差异。

项目布局

首先,Python通常不需要特定的目录层次结构,反之,Go则需要。

Go使用“标准”布局,这让它比Python稍微复杂一点,带来了更多工作,但好处是结构良好的代码库,它鼓励模块化代码,在项目规模扩大时能保持有序。

官方的文章“  ”有一个章节清晰地解释了如何构建。

静态和强类型

Go是一种静态类型的语言,由于大家习惯使用Python或Ruby等动态类型语言,因此初期会感到不太舒服。

毫无疑问,动态语言更容易出错,并且在输入的验证上需要花费更多精力来防止常见语法或解析错误。想想计算两个整数之和的某函数,实际上并不能保证用户在使用它时不会将一个字符串传递给函数 – 这会导致一个TypeError。

这种情况不会发生在Go中,因为需要声明每个变量的类型,函数可以获得哪种类型的变量,以及函数将返回哪种类型的变量。

起初它有点烦人,感觉让编码速度慢了很多,但是通过短暂的Go学习和编写后,你会真正地习惯去用它,并发现实际上它能节省时间、让代码更健壮。

本机并发

Go利用goroutines和channels支持本机并发,现在真的很方便。

首先,channels的概念可能有点小麻烦,并且很容易被当成某种数据结构或排队的实现。其实了解下来这些概念更加直白,可以真正享受它们带来的价值,并进行充分的利用。

对goroutines和channels进行了简单的可视化:

package mainfunc main() {    // create new channel of type int    ch := make(chan int)// start new anonymous goroutine    go func() {        // send 42 to channel        ch \u0026lt;- 42    }()    // read from channel    \u0026lt;-ch}

\"image\"

更多相关示例,请查看goutoutines,channels和select语句的,或ArdanLabs很棒的。

使用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,可以查看,或“  ”,这是可以找到的作为备忘单的最终资源。

如果太懒而不想把JSON转换成Go结构?没问题 –  可以帮你。

清洁代码

Go编译器始终尽力保持代码的清洁,将未使用的变量视为编译错误。而且,Go采用了独特的方法让计算机能处理大多数格式问题。在保存或编译时Go会运行gofmt的程序,它会处理大多数的格式问题。

如果不关心其中的一个变量?没问题!只需使用 _(下划线)并将其分配给空标识符即可。

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

找到合适的库和框架

我真的习惯了Python框架和库,如Flask,Jinja2,Requests甚至Kazoo,我真的很担心找不到适合Go的。但是可以猜到,Go这个伟大的社区拥有自己独特的库,甚至可以让你完全忘记旧的喜好是什么。

以下是一些个人偏好 :

Python Requests =\u0026gt;net/http

内置的提供了HTTP客户端和服务器,实现得非常棒且非常易用性好。

Flask + Jinja2 =\u0026gt; Gin 

是一个HTTP Web框架,具有非常简单的API – 路径参数,上传文件,分组路由(/api/v1 ,/api/v2),自定义日志格式,提供静态文件,HTML渲染,真正强大的自定义中间件。提供了benchmark参考。

CLI Creation =\u0026gt; Cobra 

库可用来创建功能强大的CLI应用,还提供了生成应用和命令文件的程序。许多广泛使用的Go项目都是使用Cobra构建的,包括Kubernetes,etcd和OpenShift。

强烈推荐的一些其他的库是:,和一个很棒的列表 –  。

其他资源

在我的Go之旅中,下面是一些起到了极大帮助的资源:

[1]   – 一定要看看他的和。Francesc还组织了一些伟大的研讨会 - - 和。

[2] 
[3] 
[4] 几个Twitter账户:,,。

总结

作为一名五年狂热的Python用户,我担心过渡到Go会很痛苦。但我真的很兴奋,看到有一个真正强大的社区,贡献率和维护都很优秀的资源,可以帮助大家顺利过渡到Go。Go是当今发展最快的编程语言之一,希望Google能够好好管理,让Go成为编写云应用和基础架构的首选。

目前对Go来说是一个激动人心的时刻,鼓励大家都来学习并成为Gophers!

原文链接:

转载地址:http://ybycx.baihongyu.com/

你可能感兴趣的文章
玩一玩博客,嘿嘿
查看>>
Ubuntu设置python3为默认版本
查看>>
JsonCpp 的使用
查看>>
问题账户需求分析
查看>>
JavaSE-代码块
查看>>
爬取所有校园新闻
查看>>
32、SpringBoot-整合Dubbo
查看>>
python面向对象基础
查看>>
HDU 2044 一只小蜜蜂(递归)
查看>>
docker 下 安装rancher 笔记
查看>>
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>