我喜欢 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 现实生活实现,或 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,可以查看这篇文章,或“ 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 => 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 之旅中,下面是一些起到了极大帮助的资源:

[1] Francesc Campoy  – 一定要看看他的YouTube 频道和GitHub 个人资料。Francesc 还组织了一些伟大的研讨会 - - Go Tooling in Action和Web Applications Workshop。
[2] GopherCon 视频
[3] Go Web Examples
[4] 几个 Twitter 账户:Golang Weekly,Gopher Academy,Golang News。

总结

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

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

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

使用 Python 5 年后,我转向了 Go相关推荐

  1. Python 正在从简明转向臃肿,从实用转向媚俗

    国庆长假期间,Python3.9正式推出,各大IT平台和众多自媒体纷纷火力全开,热推Python3.9的新增特性.然而,除了媒体的自娱自乐,几乎所有的程序员都对此表示无感.我甚至觉得 ,每一次的版本升 ...

  2. 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗

    作者 | 天元浪子 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 国庆长假期间,Python3.9正式推出,各大IT平台和众多自媒体纷纷火力全开,热推Python3.9的新增特性.然 ...

  3. 吐槽:Python正在从简明转向臃肿,从实用转向媚俗

    来源:Python作业辅导员 2020年10月,Python3.9正式推出,各大IT平台和众多自媒体纷纷火力全开,热推Python3.9的新增特性.然而,除了媒体的自娱自乐,几乎所有的程序员都对此表示 ...

  4. 使用 Python 5 年后,我转向了Go

    我喜欢Python,在过去的五年里,它一直是我的首选语言.Python非常友好且易于学习,迄今仍然超级有效. 几乎可以用它来做任何事情 – 从创建简单的脚本,Web开发,到数据可视化以及机器学习. 但 ...

  5. python十年后的体重_测试一下你10年后的体重

    , 想知道自己10年后有多胖吗?开始测试一下吧! 1.你对洋快餐的热衷程度? A.每周3次或更多.(3分) B.每周2次以下.(0.5分) C.基本不去.(0分) 2.总是难以抗拒可口的甜点诱惑? A ...

  6. python十年后的体重_测试你十年后的体重增长多少

    俗话说:男人不问收入,女人不问体重.减肥是所有女人一辈子的事业,可以没有爱情,可以没有存款但也一定不能有满身的肥肉.在这个拼颜值的时代,好看的身材也可以加分不少.想知道十年后的你体重变化是怎样的吗?测 ...

  7. 机器学习从Python 2迁移到Python 3,你需要注意的一些事……

    编译 | AI科技大本营(rgznai100) 参与 | 林椿眄 编辑 | Donna Python 已经成为机器学习及其他科学领域中的主流语言.它不但与多种深度学习框架兼容,而且还包含优秀的工具包和 ...

  8. 机器学习如何从 Python 2 迁移到 Python 3

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 本文经授权转自人工智能头条. Python 已经成为机器学习及其他科学领域中的主流语言.它不 ...

  9. python基础教程第三版电子版-《python基础教程第三版》PDF高清完整版-免费下载...

    <python基础教程第3版>高清PDF下载地址:http://t.cn/EGxO1sW Python基础教程 第3版Python简明教程书籍 Python编程从入门到实践 灵程序设计丛书 ...

最新文章

  1. ibatis源码浅析- 初探
  2. 使用外置tomcat部署spring boot程序需添加servlet-api
  3. [转]ROS2 源码解析与实践 - Node
  4. 动态初始化一维数组详解
  5. 2021南京大学计算机复试线,南京大学2021年硕士研究生复试基本分数线
  6. 网盘是否能做一只安全的企业信息快递手
  7. 干掉讨厌的 CPU 限流,让容器跑得更快
  8. MySQL5.6忘记root用户名和密码
  9. hive 两个没有null指定的表左关联的结果有null_Hive企业级调优表的优化
  10. python 多线程 全局锁_python的多线程+GIL全局解释器锁+其他LOCK
  11. sqluldr2导出过blob字段_sqluldr2导出数据没有文件也没有报错
  12. UrlRewrite重写url
  13. pvid与access的关系_浅谈PVID和VID区别
  14. 映美FP-530K+打印发票卡纸
  15. 我母亲在一家计算机公司工作,我的母亲作文
  16. 腾讯云服务器443端口无法访问
  17. Tensorflow入门——自制数据集:将未经处理的图片制成npy格式的数据集
  18. 如何自己手动修改win10磁贴背景颜色?
  19. Semilogx 不是对数坐标
  20. cpri和10g-kr的关系?

热门文章

  1. 钢笔现代签名设计【图片】
  2. 认准了大B客户,Trustdata从移动数据开始挖掘价值
  3. 在Windows上打造出自己的Linux开发环境
  4. linux完全卸载python
  5. 鸟哥的Linux私房菜-基础篇第四版.pdf免费资源下载链接,《鸟哥的Linux私房菜-基础篇》第四版.pdf
  6. 渡课学习第20天:太倒霉了
  7. 超实用网站,一次性分享出来
  8. 国产化NI虚拟仪器高精度数据采集卡控制器进口替代方案
  9. 外星人寻找计划+Linux,霍金发起寻找外星人计划
  10. 云起实验室:使用RDS和ECS搭建个人博客