golang 转python三个月之后感想

4 篇文章 0 订阅

        因为架构师离开,新架构师使用python,所以团队转成使用python,我之前一直使用golang没有用python经验,很多地方感觉奇怪。于是想总结下这些共同和差异。

一、相同点

        1.程序的架构设计

        不管是golang还是python都在用来开发web应用时,程序架构设计上其实差别不大。都是基于MVC架构,来设计目录,model层,controller层,service层。具体到细节,比如分组路由,中间件,orm钩子函数,读取配置文件,获取数据库引擎。都是为了解决相同的问题,所以这些东西,我看着代码立马就明白思路,也能基本上手。

         2.程序环境

        在python中,一个项目一般有一个/venu目录叫“虚拟环境”,该项目所有依赖包都会在这里,避免了影响“主机”的Pyhon环境。同样的golang有go mod管理工具,用vendor目录来保存本程序所有依赖的包。

        3.唯一入口

        python一般有main.py文件作为程序的入口,golang也是main.go。我几乎遇到所有golang项目,第一眼看完目录结构,第二眼就找main.go了,然后go run main.go。都是唯一入口,对理解程序来说还是比较容易的。

        还有比如数据结构,列表,切片,map之类,所以我直接上手写python没多大问题。遇到最大的问题在不同点。从大得差异一点点说吧。

二、不同点

        1.WSGI

        Web Server Gateway Interface Web服务器网关接口,   发现这个概念之后,我一直有个疑问就是,为什么golang不需要这个协议?我写了两年golang web从没听说过哪个golang web框架还必须要支持另外一个协议。和网友讨论后才大致理解,关键在于golang标准库http包。大部分的golang web框架在解析http协议时都用的golang标准库http包,所以解析出的结果是一样的。而python web框架并没有使用python web服务器的标准库。

gin里面启动http服务器,使用的是golang标准库net/http

 beego同样

python bottle中,可以指定web服务器

 这也能说明,为什么这几年golang web开发迅速成为了热门。开发人员根本不需要去理解什么复杂的概念,直接上手,很多web的东西golang标准库已经支持了,不需要第三方包,从开发效率来说,golang不弱。

        2.错误处理。

        python的错误处理,是使用try:except来包裹可能错误的代码,并当出现错误时处理。而golang是单独处理每一个出现错误的地方,包括每一个函数。我写golang时,已经习惯每一个函数都会返回一个错误结果,然后判断错误是否为空。所以当出现错误时,我立马就知道问题出在哪,而python我有时候还得查一会才能找到问题。比如,读写文件的错误,数据库的错误,具体函数的错误,想在except里处理其实代码量并不比golang少。最纠结的一点是,每个函数没有返回错误,我都感觉这个函数有问题,有很大的漏洞隐患,但是加上吧,我又给写成了golang代码。

        3.版本兼容性

        python2,python3在一些基本的方法上差异有时很突兀,比如字符串方法,map方法,列表在python2上有,python3又没有了。不过python3对基础数据结构提供的方法是真的好用!在golang里可能根本就没有这些方法。用的时候必须查文档。golang的兼容性基本没啥问题,毕竟说过会兼容以前版本不会很突然说这个方法1.11有1.15就没有了。也不会说1.15的程序不能跑在1.11。(但是golang我确实遇到过降级后,不能跑的问题。)

        4.异步

        这个我想好好说,可惜我没怎么用python的异步……只是真的用不习惯,可能golnag给我惯得,一个go就起了一个golang协程。

 

        5.面向对象

        python是面向对象的,golang并没有对象,但是可以说面向接口(interface)?写了几个月python,可以说一切都是对象,除了公共方法之类,其它都是类,然后实例化类。很好理解,其实学校里面学的就是面向对象,所以并没有什么难懂。而且在基础的“对象”使用上,golang和python其实没什么不同。

        6.入参

        python并不强制要求入参必须写明数据类型,所以很多时候根本看不懂代码,你看到一个参数传了进来,却不知道这个参数是什么类型。好几次我看着函数文档还是不知道入参的数据类型,这是真的让我抓狂。golang interface也有这个问题,但是毕竟很少直接传interface。

        最后我想说的是,尽管有规范,但是我感觉我写的python代码就是“shi”。特别是我要用python重构golang代码时,很多地方我不知道用python怎么写,重写完真的感觉漏洞百出,根本没有鲁棒性可言。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值