我们现在的项目是用的 django+restful 做接口,最近接触到很多 go 的内容,被网络上的讨论有点弄晕了。如果做接口后端,为什么 go 比 python 有优势,除了速度这些还有什么?
1
kidlj 2019-10-17 17:39:22 +08:00
说一个吧,几年前尝试 Django + Nginx 配置差点疯掉。Go 甚至 Nginx 都不需要扔服务器上就跑了。
|
2
iPhoneXI 2019-10-17 17:40:13 +08:00 via Android
速度就是优势,省了一堆优化的时间
还有静态编译好部署 静态类型,方便重构 /避免一些类型错误 |
3
wafm 2019-10-17 17:42:08 +08:00
说实话把,我觉得 GO 挺像易语言的
那种做好编译就能用的 |
4
zy8848 2019-10-17 17:42:17 +08:00
纸面上的性能优势不是真的性能优势
我日常写一些文件读取匹配处理等功能的时候,通常 php 比 go 快 但凡涉及多线程,go 的优势就体现出来了 go 的协程使用起来非常方便,是一门优秀的语言 |
5
ClericPy 2019-10-17 17:44:09 +08:00
速度就够了... golang 随便十万并发, Python 不借助 C 的话, starlette 也就三四万... Django 的速度就不提了...
其实感觉 golang 就是一种压榨机器性能和程序员友好之间的另一个折中, 和 python 比, 前者又稍微向机器性能侧重了一点点, python 则是像程序员侧重一点点. 实际场景里 golang 主要做对比的是跟 java 比压榨性能, 跟 C 比初级程序员友好. 和 py 这种脚本语言, 性能一项就足以... 不是一个量级, 至于很多人提的可读性, 平时真没感觉比 py 好... |
6
wangyzj 2019-10-17 17:44:24 +08:00
计算密集型和 io 密集型都还算挺快
语法简单 google 背书 docker 流主力 国内跟的快 |
7
hwdef 2019-10-17 17:48:25 +08:00
抛开领域谈语言,就是耍流氓。
现在的趋势是什么? 微服务,分布式, 这些领域什么框架火? 这些框架都是什么语言写的? |
8
fishofcat 2019-10-17 17:48:30 +08:00
谷歌背书,etcd,k8s,docker 主流的云原生时代的宠儿都是 go 的,我要是说他没优势,你信不,你要是问我具体好在哪,除了感觉写线程再也不用 pthread_create,其它真没什么太大感觉。。。。
|
9
dif 2019-10-17 17:49:25 +08:00
不用在乎被反编译吧。
|
10
BruceAuyeung 2019-10-17 17:53:15 +08:00 via Android
协程使得并发编程超级简单,性能还杠杠的,就这一条非常适合微服务开发,真香!
|
12
yvescheung 2019-10-17 18:03:10 +08:00
交叉编译,静态编译,高并发,方便的线程进程,面向接口
|
13
index90 2019-10-17 18:05:33 +08:00
没有 generic
|
16
upday7 OP 接口项目的话很多性能上的问题还是数据库和网络上吧? go 带来的收益如何扩大呢?
|
17
BubbleNoodle 2019-10-17 18:18:51 +08:00
他妈的 kubernetes 用 go 写的 还不够吗
|
18
lbp0200 2019-10-17 18:23:42 +08:00
没有了
|
19
yoshiyuki 2019-10-17 18:24:04 +08:00
语法简单,只有 20 多个关键字
强类型,有静态检查,计算性能高 适合针对多核 CPU 服务器编程,有效利用多核 CPU 带来的单机性能优势 编译后二进制包易分发 |
20
Aether 2019-10-17 18:31:27 +08:00
我听说,绝大部分项目都远远不到谈性能这个阶段……
|
22
BBCCBB 2019-10-17 18:37:35 +08:00
原生协程,docker,k8s, etc... 云产品开发的霸主。 生态上去了
|
23
index90 2019-10-17 18:37:42 +08:00
@upday7 举个例子,搜索。100 万条数据找 10 条匹配度最高的。
一台服务器+一个数据库,基本上瓶颈会出现在数据库,因为你要在 100 万条记录的数据库中寻找 10 条数据。 换个做法,一台服务器,100 个数据库,每个数据库存 1 万条数据,那么一次搜索查询,需要并发出 100 个数据库请求,那么这时候瓶颈就会出现在应用服务器的并发性能上了。 所以 go 要扩大收益,架构也要跟着改变。 |
24
zarte 2019-10-17 18:41:00 +08:00
交叉编译后可以不用考虑环境问题。
各种文章说协程有优势,不过自己也没跟 c#的多线程对比过。 小项目功能开发简单,建立 main.go 文件,引入库,写方法或者定义几个结构体就 ok 了。以上步骤比 c#简单没有未知异常。 |
26
fuxiaohei 2019-10-17 18:52:47 +08:00
多试试,就会知道,随便就可以撸小东西用,真方便
|
27
MengQuadra 2019-10-17 19:10:12 +08:00
我个人感觉最大的优势还是在不改动代码的情况下,go 编译后的并行 /流水优化实在是相当厉害
简单省事 |
28
gamexg 2019-10-17 19:25:19 +08:00
性能可能没大感觉,但是动态一时爽,重构火葬场...
复杂接口,维护时间一长,文档不一定准确了,修改一处结构不知道会影响到哪些地方 测试覆盖不了所有流程,虽然看似测试通过,但是还有可能运行中崩掉。 |
29
MonoLogueChi 2019-10-17 19:28:02 +08:00 via Android
效率高,静态编译。
效率一条就足够了 |
30
Leigg 2019-10-17 19:28:21 +08:00 via Android
跟我学 vlang 吧
|
31
jacketma 2019-10-17 19:31:39 +08:00 via Android
go 在 Java 之前出现,不是完美了?
|
32
kaneg 2019-10-17 19:33:09 +08:00 via iPhone
接近 C 的性能加现代语言的优雅
|
33
janus77 2019-10-17 19:35:00 +08:00 via iPhone
简单和性能的折中吧
c 性能好但不简单 py 简单但性能不够 java 性能也算好,但是依然比 go 复杂了点 |
34
v2exchen 2019-10-17 19:35:41 +08:00 via Android
贵
|
35
optional 2019-10-17 19:38:47 +08:00
并没有用特别的优势,只是天下苦 java 久矣,被 java/jvm 搞得心力憔悴,看到一个性能 ok,写起来有没有 c/c++这么痛苦的语言,就觉得很不错。
|
36
zicla 2019-10-17 19:42:15 +08:00 2
看大伙讨论 go,也来凑个热闹,这是我用 go 开发的开源云盘 https://github.com/eyebluecn/tank 性能非常好,访问速度很快,这其实就是得益于 go 的语言特性
|
37
zzlettle 2019-10-17 19:53:07 +08:00 via iPhone
人家说用 django 开发网站跟 go 比较
我反正感觉一般项目用 django 开发神速。用 go 费劲。 小项目特别是 web 开发.go 的那些框架还有第三方库整合起来不就是 django 啦,然后用起来还没 django 顺手 |
38
dosmlp 2019-10-17 19:57:51 +08:00
当然是性能,python 那点速度真是够受的了,Java 也是慢的一比
|
39
Tink 2019-10-17 20:09:02 +08:00 via iPhone
并发
|
40
TangMonk 2019-10-17 20:11:50 +08:00 4
.net core 的出现, go 的地位应该慢慢要下滑了.
|
41
zzlettle 2019-10-17 20:25:52 +08:00 16
别撤那些运行效率
比如开发个人 web,公司小的网站,就算是一个中小型的商城 我觉得 django 完全能对付 哪有那么多并发啊 你们公司做什么的啊 有那么大的需求吗? 但开发效率完胜 go 现在 go 有哪个框架能跟 django 这样开箱即用匹敌的 一大堆第 3 方开源的库,自己慢慢组合起来 这就是为什么你在网上看到最多的关于用 go 开发的文章 都是写 api,restful 因为用它来开发个传统 web 真要人命 反观 django,开发一个传统型,也就是说不是那种前后端分离的网站 太轻松了 所有的工具 django 都帮你做的好好的 只要把数据模型构建好 基本网站就算做完了 就算写接口 不复杂的话,django 也是能很轻松完成 复杂的话,go 一样做起来麻烦 本来写逻辑,用 python 就是有优势 所有 go 的优势就是在大并发的时候 哪有那么多大并发 全国才几个淘宝,微信啊 一般的需求我完全不知道 python django 哪些不能满足 其实一大部分用 go 的情况 都是那些人在炫耀 炫耀自己用上了所谓的高大上的 go 因为现在 python 太普及了 自己也跟着用,感觉不能提现自己的实力 反正老板也不懂技术 看到那些大公司很多用了 go 自己也要用 都是有病 |
43
zzlettle 2019-10-17 20:36:55 +08:00 5
用 python
9 层以上的逻辑基本可以很轻松用 for in 循环来搞定 字符串,数据处理,就像玩一样 反观 go 几个数据类型,变来变去,参数写的死死的 函数方法 接口 一个简单小逻辑 变着方的折磨人 然后写出来还觉得自己多了不起 看我用这么复杂的方式写出来的代码 你看不懂吧!!!!! go 大家都在说学起来简单,关键字就那么几个 但是用起来,你就知道了 同样实现一个逻辑 我靠,它的语法思考方式真的 反人类 上面 import 了一个库 下面修改下,没有用到 就在那里报错 真是有病 反正你的项目要不是真的所谓百万并发 用 go 真的是嫌你睡眠时间太长 还是你加班时间太短 如果用来写个小小的 10 几行代码就能用的 server 用 go 确实有优势 一旦是那种.不大不小的中小型项目 go 就处于不上不下的尴尬处境 恰恰这种中小型项目是最多的 |
45
bingmang 2019-10-17 20:44:44 +08:00
技多不压身
|
46
TangMonk 2019-10-17 20:49:52 +08:00
@zzlettle #43
的确, 1. import 的包如果不使用, 他要报错. define 的变量 not use 也要报错. 我现在先 import 或者定义好, 一会儿用不行么? 或者 debug 的时候要注释掉一些代码, 还得找到之前定义的地方再注释一遍 2. 没有 exception, 每个 err 都要去 check and panic 一下 等等... golang 只能写点小工具挺合适, 大型项目还是用 C#(dotnet core), java 之类的 |
47
abcbuzhiming 2019-10-17 21:03:21 +08:00
@TangMonk 不会,.net core 会和 java 抢占地盘,go 的特点和他们不同
|
48
TangMonk 2019-10-17 21:13:47 +08:00
@abcbuzhiming #47 现在 go 能做的, .net core 基本都能做啊
|
49
Reficul 2019-10-17 21:17:41 +08:00
争啥,爱用啥用啥。都 9102 年了还在争,我要来说一句,PHP 是最吼的!
|
50
qile1 2019-10-17 21:28:58 +08:00 via Android
python 和 go 对比吧
python 还有个 tk 做界面,go 想开发个 c/s 程序 现在好像不好弄 python 对比于 pb 程序慢很多,我处理检验设备传过来的结果数据,存到数据库慢的不行,不过可以接受 |
51
dbskcnc 2019-10-17 21:44:41 +08:00
语言简单,不管谁写出来的代码,只要稍稍用心就可以看得懂在干什么,不需要烧脑解码某些天书语法
交叉编译,部署都超级方便 最主要的是基本会点编程的只要稍加学习都能用它干活,做好 review 和 ci,体验还是不错的,搭配 go mod,goland 使用效果出奇的好 |
52
hakono 2019-10-17 21:58:20 +08:00
从来发布置的角度来讲
你要 django 能跑起来 至少必须得有 django + uwsgi + nginx/Apache。 那么问题来了,uwsgi 的配置你要不要学着写? 写完后 nginx/Apache 的配置是不是也得要写? 这三者之间的交互搞错点东西就炸,初学者能在上面折腾死你,即便有经验的每次新环境配起来也是让你蛋疼 啥,你不会用 Docker 简化配置过程? 那么你 docker 用法要不要学? Dockerfile 怎么写要不要学? docker-compose 怎么写要不要学? 而且正重要的是 Dockerfile 这东西你写完必须得 build 跑起来才知道有没有写错有没有 bug。 相性我,你在没有前人项目的基础上徒手写个 Dockerfile,大部分的时间全都是消耗在了 build - run - 出错 回头改 继续 build 的循环中。 而且这特么还没考虑到你写 docker-compose 配置也有可能会有坑。。。。 然后这时候我们来看看 go,服务写好了? 编译出来,可执行文件直接扔到服务器,`./hello_world` 成了,跑起来了,不用 nginx 不用 uwsgi, 不用搞破 docker, 并发,性能极好,你说,哪个爽? |
53
okampfer 2019-10-17 22:08:10 +08:00
@TangMonk .NET Core 现在也可以编译为单个可执行文件了是吧?我的意思就是跟 golang 一样,不需要单独安装运行时,扔到服务器上就能跑。
|
55
back0893 2019-10-17 22:19:45 +08:00
简单,方便不就好了
|
56
clino 2019-10-17 22:33:12 +08:00 via Android
感觉 groutine 是杀手锏,其他的特点都没啥稀奇的
|
57
zzlettle 2019-10-17 22:35:16 +08:00 11
可以这么说
一个用 go 能开发出来一个哪怕是很简单网站的人 他对网络这块的知识要求就已经很高了 你说的那些什么配置 nginx uwsgi 这些 相信如果你是个用 go 做开发的人 早就过了需要专门抽出时间还要去学习的阶段了 因为 go 做 web 开发是非常底层的一步一步组建起来的 你如果对底层这些不懂 你根本无法用 go 来开发 相反 一个用 python django 开发的人 真的对底层网络这些需要的知识不是那么高 因为所有的都封装好了 导致了 很多人,用框架开发了很多网站 其实他对网络的很多底层东西,懂得并不多 因为并不需要 然后你这个时候出来说 go 开发完了以后,配置时多么的简单 你看直接传上服务器,就能跑起来 那是因为你需要对跑起来之前很多的底层,自己处理 你说同样是一个人 目的是开发一个网站 到底是是哪个对开发人员友好 用 go 的话,你先要学习很多基础知识 有功夫学这些 我用 django,都已经开发完了 那些你所谓的配置 你真的是每次都写吗 不都是一套配置文件,全部项目都一样用 就是修改下里面 ip 和 web name 这个你说学起来有多难 或者说根本不用学,在网上找个案例,原样 copy 就可以了 很多人开发了很多网站 真的对 nginx 搞懂拉? 不都是用一份不知道哪里找的别人的配置修改下就能用了 跑一个网站,用的配置都是一样的 一个中小型项目,我就不明白 你搞出来这么多幺蛾子 又是 docker 又是 build 的 需要吗? 只要在环境里面安装了 python 还有数据库还有 nginx 数据库你用 go 开发就不需要装拉? nginx 不就是一行代码就安装好了,配置文件修改下参数就行了 这就 就完事了 你说这些很难吗 比起学好那些 go 的 net http 底层的库 自己要处理好 cookie session 各种注入的预防 到处找第 3 方库,各种修改,把这些第 3 方的库整合起来 oh my god 人家 django 都是开箱即用 orm 完全傻瓜化 不是我说 你用 go 开发 用的是原生的 sql 库还是 gorm xorm 这些? 你自己说当初学这些用了多长时间? 学完了,用起来有 django 的 orm 方便吗? 我还没说 go 里面的模板了 有一个好用的吗? 现在 github 里面排名最高的一个模板处理库 pongo2,api 用法开发目标就是要完全和 django 的模板 api 一致 结果用起来还是各种 bug 你说到底哪个开发效率高 哪个对人友好? |
58
wqxuan 2019-10-17 22:36:34 +08:00 via iPhone 2
后端,同样经验,go 钱多
|
59
est 2019-10-17 22:40:44 +08:00
python 其实也可以不要 nginx 的。 只是大家都无脑 gunicorn 了。。
golang 的优点还是很突出,快。 |
60
eoo 2019-10-17 22:42:57 +08:00
php 是世界上最好的语言 不接受反驳{滑稽脸}
|
63
stevenbipt 2019-10-17 22:58:08 +08:00 1
我是来泼冷水的~
1. 并发很容易,但是你确定团队里面的每个初级程序员都能够写好并发代码?不会出现数据竞争,死锁这些问题?就算有 go race 辅助检查,一旦出现幺蛾子这玩意儿调试起来也够呛的 2. 静态编译单文件执行,只要改动一点硬编码东西就得重新交叉编译上传启动,服务器多了就算使用 ansible 上传和跑起来也是够麻烦的,有时候觉得热部署也挺香的~ |
64
guonaihong 2019-10-17 23:05:14 +08:00
看目标人群,如果以前用 c 不停 malloc, free 内存。用了 go 之后感觉真爽。。。很多函数名和系统调用相同, 也会有一种新切感。
|
65
okampfer 2019-10-17 23:06:42 +08:00
|
67
back0893 2019-10-17 23:15:26 +08:00
反正都是写网页考虑下 php?
反正加个 nginx 就能跑 第三方库也多,写法看个人意愿 从原生到复杂的框架都能写 (其实 go 的工资高,反正都是面向工资编程为啥不用) |
68
jessun1990 2019-10-17 23:17:30 +08:00
我觉得这么一个道理: 使用相同的时间成本和学习成本, Go 的收益更大.
|
69
jessun1990 2019-10-17 23:18:13 +08:00
热烈欢迎 LZ 把我的慕课网课程买走学习, 贼好的课程.
|
70
okwork 2019-10-17 23:22:04 +08:00 via Android
@upday7 裸跑 gunicorn,static 静态文件放哪里的?都走 cdn 吗?
-------- Python 项目部署也是可以递进的。最原始就是直接纯裸跑,高级一点套个 uwsgi/gunicorn,再高级一点前面套 nginx,再高级一点前面套负载均衡,后面分布式数据库。这四层套下来,什么并发都不是事啦 |
72
AmrtaShiva 2019-10-17 23:27:23 +08:00 via Android
@okampfer 有 IDE ?
|
73
mamahaha 2019-10-17 23:44:07 +08:00
大企业用 go 是为了省钱;小企业用 go 是为了起哄。
|
74
hu8245 2019-10-17 23:44:14 +08:00 via Android
为什么不问 Rust 有什么优势? 不配有姓名吗
|
75
Pythondr 2019-10-18 00:55:11 +08:00 via Android
开发不仅仅只有 web 开发,多扩展知识面吧。
多了解了解基础设施的设计开发,不要将眼光和思维局限在接口开发 |
76
index90 2019-10-18 01:15:51 +08:00
@stevenbipt #63
1. 水平不足就不写并发代码了?水平不足就可以不解决性能了?不止一次见到有人以水平不足去怪一项技术垃圾了。 2. 即使 Java 的热部署也是有要求的,不是所有更新都能够热部署,以前巨石架构用热部署还情有可原。都 9102 年了,微服务都快淘汰了,还不知道蓝绿部署,滚动发布。go 编写服务,配合容器化+k8s 编排,发布是很轻松的事情。 |
77
dreampuf 2019-10-18 02:34:02 +08:00
- 强类型
- 并发便捷且轻量 - 部署方便,依赖管理 ORM 不是全部工作内容,倾向于手写语句。Docker 引入一个更大的问题,容器化不比换语言简单。正如 Python 在科学计算届的火热,Golang 在容器化和 K8s 的背景下也得到长足发展。 > 做接口后端 取决于开发者本人,熟悉什么用什么。两边差距达不到质变。 |
78
qqxx520 2019-10-18 03:03:35 +08:00 via iPhone
脚本语言和编译语言,各有千秋,脚本语言要不是开发效率快,要他何用,编译语言要不是运行性能高,要他何用!
用编译语言来和脚本语言比开发效率,天生不足,反之亦然。 等到将来那一天 python 等那些脚本语言都绝迹了, |
79
cnnblike 2019-10-18 06:47:01 +08:00
部署真的很烦人
|
80
charlie21 2019-10-18 06:53:29 +08:00 via Android
省钱
以前要堆机器(物质资源)才能解决的事,现在换个会某编程语言的人(劳力资源) 就解决了。便宜资源 换 贵资源,达到同样效果 |
82
crella 2019-10-18 08:30:27 +08:00 via Android
|
85
NaVient 2019-10-18 09:03:24 +08:00
就三个字 go 最重要的就是云原生 看到没人提
|
86
encro 2019-10-18 09:03:59 +08:00
1,一次开发,交叉编译,到处使用。( windows,linux,arm,物联网 )
2,没有魔法( Python 有多少让你惊奇,仍不住叫 WTF 的) 3,性能好(原生协程,编译速度快) 4,社区开源产品丰富( package 数目,GIT 开源项目数目上,除了 npm,pip,go 应该快赶上 composer 了) 5,背靠 GOOGLE,官方包质量高(相比 python 的 HTML 解析包你就得学 4 个) 看看 Github 上得 package star 排行,我认为 go 高质量库已经超过 Python 了。 Why? |
87
Cellei 2019-10-18 09:10:48 +08:00
说个与贴子主题无关的:vert.x+kotlin
|
88
gramyang 2019-10-18 09:11:12 +08:00
go is god,30 分钟 5 万!(指同等逻辑下 java 的代码字数)
|
89
weer0026 2019-10-18 09:12:32 +08:00
单纯是逃不开,最近学 docker,k8s,顺手学了 golang,生态在这里的。
|
90
find456789 2019-10-18 09:13:32 +08:00
本来打算换 go,看完各位的回答,我还是坚持 python, 因为我的网站,瓶颈应该在数据库上,而不是并发上, 等哪天我有 10w 并发 在考虑换 go
|
91
XIVN1987 2019-10-18 09:22:48 +08:00
|
92
chenqh 2019-10-18 09:40:36 +08:00
@find456789 我觉得有 2k 并发都可以换了 golang,但是直连数据库 2k 并发有点难呀
|
93
blless 2019-10-18 09:43:38 +08:00 via Android
@find456789 纯 python 100 并发 P99 就很难看了,再加 GIL,你就信那些吹 python 的嘛。再加 GIL 额外进程消耗,几百的时候你就要开始折腾优化。这功夫下来 go 版本瞎写都几千 qps。
|
94
jdlau 2019-10-18 09:53:40 +08:00
这种东西只有自己用过才能体会到吧。。
|
95
jydeng 2019-10-18 09:57:46 +08:00
围观一下
|
96
xmge 2019-10-18 09:59:14 +08:00
1、go 简单(但不简陋)
2、go 中协程序是轻量级的线程(占用资源少),同等性能的服务器中可以并发更多的处理单元。 |
97
kran 2019-10-18 10:01:11 +08:00
把一部分工作交给编译器, 这是很好的.
|
98
Hanggi 2019-10-18 10:03:59 +08:00
@find456789 就算瓶颈在数据库上,跟并发一点关系也没有,那也是 go 更快。
|
99
tt67wq 2019-10-18 10:10:37 +08:00
如果只是 crud 的业务,go 没啥明显优势,看看 go 的明星项目,都是容器,网络中间件相关的,
比底层操作系统上层一些的领域是 golang 主场 |
100
micean 2019-10-18 10:21:55 +08:00
go 的优势只有 docker 吧
|