求从 Python 转 Go 的实际经验分享

2018-01-23 19:18:22 +08:00
 lianggaofeng04
社区里有没有 从 Python 转 Go 的实际业务开发经验的人,分享下转的过程中 转的原因,工程效率对比,遇到的各种坑, 最后的收益 等等的
15842 次点击
所在节点    Python
33 条回复
yuchenyang1994
2018-01-24 15:45:37 +08:00
@bookding libuv 这种配合 py 虽然性能够好,但是能写好这种异步很难,而 golang 提供了把这种细节隐藏在语言 runtime 里,更有利于大规模开发。
bookding
2018-01-24 16:49:44 +08:00
@yuchenyang1994 python3 的 async\await 语法已经比原来的 yield 好多了,只要脑子里有异步这回事,写起来其实还好。当然 golang 的 goroutine 还是厉害,尤其像 fasthttp 这种对 goroutine 做了二次优化的,的确要甩 py 几条街。
我觉得倒不是大规模开发就一定不能用 python,对于业务需求变化快的服务,用 py 写的效率可能是用 go 写的三倍,尤其是涉及到复用重构,或者是频繁更改接口数据的情况下(比如前端一天变三次 json 结构)。况且一般 web 业务的瓶颈都在 io,就算用 go 来写也不会有本质性的提升。
est
2018-01-24 16:54:48 +08:00
golang 可以让性能问题更晚爆发。就吃定了这一点而已。

那种从 cache/db/rpc 里读一个返回值丢到 http response 里的事儿,就应该 golang 来做。
BeanYoung
2018-01-24 17:42:50 +08:00
如果性能瓶颈在数据库,用任何语言写区别都不大。投入精力换语言来提高性能,何不投入精力把业务好好设计一下,岂不是收益更大?
l1093178
2018-01-25 13:08:04 +08:00
@Muninn 感觉 dep 的设计还是有点不适应,官方文档也还有点欠缺

@drackzy 这倒是,Elixir 国内也很惨(感觉比 Ruby 还惨)
yuchenyang1994
2018-01-25 18:13:43 +08:00
@bookding 我本身是 python 开发,我真的不觉得 python 开发大型项目相对比 go 有优势,因为这只能是相对来说。动态语言一旦开发到一定程度,你会发现面目全非的业务逻辑,满天乱飞的全局变量,散落一地且毫无抽象的函数,见谁都恐慌的错误处理。要开发大型项目,这就十分依赖单元测试,但是说实话,很多人连基本容易测试的代码都很难写出来,单元测试覆盖率上不去,以后做重构,简直就是灾难。golang 相比 py 好的是他在工程上做了很多妥协,甚至不惜牺牲程序员的好感度, 譬如:令人蛋疼的错误处理, 简洁到没有三元运算符的语法,没有泛型等等。。。说到底,python 是一个非常信任程序员的语言,但工程角度来讲应该是不能相信任何程序员。
bookding
2018-01-26 17:12:25 +08:00
@yuchenyang1994 哈哈哈,面目全非的业务逻辑我也见过,这个深有感触。动态语言对于程序员自身的要求比较高,如果用 python 的话,代码 review 就更重要一些。
至于说大型项目,我也不知道我做过的项目规模够不够大,但是如果一开始就按微服务来写,控制好每个服务的规模的话,单元测试也就容易做得多了。
不过说实话,我也同意 go 在工程角度上比 python 更有优势,毕竟 python 从一开始诞生的时候也没想到会有今天这样规模的应用。而 golang 从一开始就是按照互联网工程来设计的,比如 channel 这种东西,只有写起来的时候才知道有多方便。
yuchenyang1994
2018-01-27 22:46:05 +08:00
@bookding 嗯,所以问题来了。一般我们开发过程中,一开始我们用 python 快速实现,快速试错。因为有时候我们甚至不知道我们到底要做什么,能做到什么规模。但是一旦项目稳定了。人都是趋利避害的,基本上就不用 python 了。就比如说 asyncio 吧,是能极大提高并发,说实话做的好的话,并发性能甚至可能比 go 还要高。但目前看,即没有成熟稳定的工业框架,也没有大企业为其背书。况且目前发展水平来看也很难落实到工业应用上(我实在是不想吐槽 sanic )。我觉得 go 值得学,甚至值得转。他不是一门让你写的爽的语言,甚至有时候会让你痛苦的语言。但却是把好用的锤子,干啥都干不好,但绝不会干坏的这种。
q397064399
2018-01-28 06:40:38 +08:00
都要转了,,为啥不转 Java, 转 go 弥补 python 的那些问题,Java 都很好的解决了,直接上奔驰啊,要骑什么自行车
superhan
2018-01-30 22:07:10 +08:00
@q397064399 同样的疑问
fakepoet
2018-02-04 03:57:34 +08:00
@q397064399 大学里学编程的时候,被 java 版本的 hello world 一秒钟劝退
KaelSunstrider
2018-02-28 00:09:30 +08:00
@yuchenyang1994 求吐槽 sanic
Fiery123
2019-01-08 09:48:24 +08:00
@shidenggui 想请教下 go 里面 celery 是如何替代的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX