我们现在的项目是用的 django+restful 做接口,最近接触到很多 go 的内容,被网络上的讨论有点弄晕了。如果做接口后端,为什么 go 比 python 有优势,除了速度这些还有什么?
101
snoopygao 2019-10-18 10:24:30 +08:00 3
别说了,php 是最好的语言
|
102
julyclyde 2019-10-18 10:28:45 +08:00
@BubbleNoodle kube 也不是“必须用 go 来写”啊
尤其是那种异步系统,根本没什么性能需求 |
103
marco25 2019-10-18 10:30:51 +08:00 1
同意前面说的,django 的封装和优秀的文档使得对 HTTP/HTML 零基础的入门级开发也能很快上手。举两个例子:我学 django 的时候对 HTTP 毫无概念,是做着 django 现学的;我同学是做硬件的自己做了个电商网站卖到国外,当时我推荐他用 django,他毫无网络编程经验,居然看着文档一点点把支付 /后台什么都自己搞定了。没有 django 良好的生态很难想象一个新手能很快做这么完整的项目
|
104
julyclyde 2019-10-18 10:31:36 +08:00
go 的好处:
静态类型 编译出单个文件,基本可以不带运行时依赖 性能不错 风格上特别倾向于把外部代码 vendor 进来一起管理,对质量管控稍微有些好处(前提是你真的这么用了。我昨天还刚刚处理一起,在编译阶段使用 wget github master 下载外部代码一起来编译的事故) 不过这些优点其实主要是 python 的缺点衬托出来的 我爱 python |
105
ArtIsPatrick 2019-10-18 10:40:04 +08:00
做 web 开发,语言本身的速度不是瓶颈吧,高并发场景都是用协程做的,性能相差并不大。
|
106
chengxiao 2019-10-18 10:49:19 +08:00
学学呗 我之前也是 python django
最近在写 go gin 了,差别也没想象中那么大 语法上适应一下就好了 性能改善是真的 部署是真方便 但是包管理跟 pip 比实在是坑 |
107
Hanggi 2019-10-18 11:03:20 +08:00
@ArtIsPatrick 你确定吗?试试都把线程开到最大,跑一下 GET 请求 hello world 压测试试?性能差不多?
|
108
yamasa 2019-10-18 11:17:36 +08:00
@optional java 语言特性过时,烂就算了,jvm 你踩啥呢? scala,kotlin 很烂吗?一大堆大数据框架 base 在 jvm 上没见你 go 来统统重构一道把 jvm 踢进历史长河呢?除开云计算 go 有一个领域能跟 jvm 比生态吗? 9102 年了 java/jvm 怎么还没死系列?
|
110
mineqiqi 2019-10-18 11:41:34 +08:00
来看看 么接触过 go
|
111
qsnow6 2019-10-18 11:41:47 +08:00
少扯些没用的吧,本身就不是一类语言,整天扯性能问题,静态语言如果不比动态语言性能快,要它何用?
用动态语言不就图一个敏捷开发,即想即所得么。 go 要比也是跟 rust、Java 比,php、python 这类动态语言,支撑个 1000qps 很轻松,1000qps 知道什么概念吗? |
112
a15819620038 2019-10-18 11:42:16 +08:00
etcd、k8s、prometheus 等等都是 go 写的...
|
113
TangMonk 2019-10-18 11:51:42 +08:00
@jpacg #109 .net core 同样可以做,https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
|
114
jorneyr 2019-10-18 11:57:11 +08:00
天下武功,唯快不破
|
115
ArtIsPatrick 2019-10-18 11:58:56 +08:00 via iPhone
@Hanggi 开线程干嘛? Python 的协程是单线程实现的啊
|
118
ArtIsPatrick 2019-10-18 12:18:10 +08:00 via iPhone
@blless 你写过 Python 的高并发吗?还 GIL?
|
119
whyiyhw 2019-10-18 12:34:09 +08:00 via Android
我想问下 10W 并发是什么概念,自己心里没数吗? 1 秒 10W 请求跟语言关系还大吗?总感觉不管到哪都是张口就开,工程类不是讲究严谨吗?
|
120
ArtIsPatrick 2019-10-18 12:37:57 +08:00 via iPhone 1
Python 的问题在于它是动态脚本语言,本身维护起来就比较困难,再加上语法上有一些技巧又没有和 java 一样强大的规范,导致初学者的代码风格迥异,在系统做大后往往变得难以维护。但是对于一般的 web 高并发场景底层都可以用 libuv 之类的库进行加速。总之需要运行效率的地方用 C 来实现,web 服务本身用 Python,开发效率完爆 java、go 之类的,而且性能也不错。
|
121
hushao 2019-10-18 12:47:12 +08:00 via iPhone
优势目前在于轻量线程及云部署,至于并发、Django 中小公司及个人根本达不到瓶颈的地步。
至于 go,我也考虑过代替 Python 的 web 开发,撇开兴趣,真想不到非用不可的理由 |
122
Hanggi 2019-10-18 12:51:17 +08:00
@ArtIsPatrick 就是说让你多开几个实例,不然不够看。
|
123
ArtIsPatrick 2019-10-18 12:57:41 +08:00 via iPhone
@Hanggi Python 原生的异步 IO 和 go 还是有很大差距的。
|
124
salamanderMH 2019-10-18 12:58:52 +08:00
现在 go 有 go module 也很方便
|
125
kemikemian 2019-10-18 13:09:12 +08:00
有位大哥叨叨好几堆文字,不知道为什么这么气氛。
go 和 python 定位不同。go 并不是为了用来替换 python 的,是弥补 C 的不足。 说 python 多好多好,也不过是生态完善。python 多少年,go 多少年 |
126
ihciah 2019-10-18 13:16:30 +08:00
CSP 模型用起来舒服啊
|
127
blless 2019-10-18 13:57:38 +08:00 via Android
@ArtIsPatrick 有啊 py 原生请求模型是阻塞队列,都谈不上并发。业务处理 1s 100 并发挨个排队处理就 100s 了,同样命令 go 原生就 1s。我那个时候用 gunicorn+gevent+flask 勉强才能达到 go 原生 http 水准。
很多人说什么你们那点应用还触不到 GIL 限制,真是笑话。py 内部各种数据序列化转换,尤其是 pymysql 加了 orm 这种,一次请求数据处理都不知道多少次了,我就不说压缩之类的 cpu 大户了,毕竟压缩可以让 nginx 处理。但是现在 api 基本都有 hash 签名检验参数,生成 token 啥的,那点 CPU 还真是不够用。 |
128
wuwukai007 2019-10-18 14:09:53 +08:00
小姐姐都在用的 ins 就是 django+uwsgi+nginx 开发的啊,人家月活跃量 全球 20 亿 ,我觉得除了淘宝,12306 啥的,有那么多的高并发需求吗??
咱能不能别张口闭口高并发了,多考虑业务逻辑复杂度吧! |
129
abcbuzhiming 2019-10-18 14:26:32 +08:00
@TangMonk 你如果接触的比较多的就会发现后端语言在应用领域是趋同的,都是图灵完备语言所以彼此的功能都能换个语言实现。但是 go 有一个不太一样的特点是,在玩意是没有虚拟机的,因为没有虚拟机,这玩意在低延迟和低内存占用上有特别的优势,dotnet core 的对手是同样有虚拟机的 jvm,go 的对手严格来说目前没有同对位上的,因此 go 一定有自己的生存空间,直到有一个在特性上和自己对位的竞争对手来和自己竞争
|
130
TangMonk 2019-10-18 14:31:53 +08:00
@abcbuzhiming #129 我感谢有没有虚拟机问题并不大,实际上 golang 和.net core 的性能差距并不大
|
131
BlameKidd 2019-10-18 14:35:39 +08:00
你们学编程都好强啊, 我这个渣渣只面向工资编程简直惭愧.
不说别的, 我只知道 Go 开发比 python 开发工资高. |
132
ml071987 2019-10-18 14:45:25 +08:00
看你们吵来吵去真有意思
两种语言各有优势和应用场景,有啥好吵的 为什么不都用呢,谁规定程序员就使用一种语言了 |
134
lazyfighter 2019-10-18 15:28:49 +08:00
在我看来 go 适合写中间件尤其以 proxy 为主,并不适合写业务,写业务还是 java,没写过 php
|
135
kkeiko 2019-10-18 15:50:33 +08:00
./bin 这就是优势
|
136
netherlanddennis 2019-10-18 16:08:49 +08:00
|
137
AX5N 2019-10-18 16:17:14 +08:00 1
@netherlanddennis 你可以看下 99 楼
|
138
netherlanddennis 2019-10-18 16:21:13 +08:00
|
139
d1973 2019-10-18 16:25:12 +08:00
别说了,Java 是最好的编程语言没有之一
|
140
littlewing 2019-10-18 16:42:42 +08:00
goroutine
|
141
dodo2012 2019-10-18 16:42:58 +08:00
论开发速度,rails 不是看不起在座的,性能?先上线再说,鬼知道能撑多久
|
142
gaigechunfeng 2019-10-18 17:08:16 +08:00
@zzlettle 我们团队就搞 spring,老铁认为如何。 有时也会想切一下技术栈,但是迫于 spring 良好的生态,没舍得换
|
144
encro 2019-10-18 17:32:30 +08:00 1
@XIVN1987
看 Python 和 go 的 star top 100。 v2 有一个中文的排行也可以参考下。 在网络和系统层,是 Go 的天下, 比如内网穿透:ngrok, frp, goproxy, nps... 比如 FQ:ssr, v2ray, lantern... 比如 db & search:influxdb ,bolt, bleve 等等. 比如分布式系统 物联网、云计算 go 占优势, 人工智能,数据分析 Python 占优势。 如果你要写一个小爬虫,用 Python 更好, 如果你要写一个大型分布式高并发爬虫,可能选 Go 更好, 如果你要写一个小 Web,用 Python 更好, 如果你要写一个大型项目,高并发,流媒体处理,微服务,可能用 Go 更好, 如果你要学习数据分析,人工智能,目前选择 Python,java 更好, 如果你要开发一个微信服务号,小商城,目前选择 PHP,java 最好, ... |
145
skinny 2019-10-18 18:25:20 +08:00
爬虫的瓶颈难道不是在带宽、IP 池、反爬限制程度上吗?跟语言效率有什么关系?你以为实际的爬虫跟那些 GitHub 上的手撸爬虫学习小例子一样写个几行代码,然后一顿操作猛如虎,要么搞瘫别人服务器,要么全被 BAN,要么一堆脏数据?!
|
146
liulaomo 2019-10-18 20:24:42 +08:00
几年前搭了一个本地个人 wiki,使用了一个开源的 php wiki 软件(目前已经不再维护了)。后来荒废了。最近准备把它重新运行起来,整理一下里面的内容。擦,老的开源的 php wiki 软件的代码竟然不能在最新的 php 上运行,n 多语法错误。服了,世界上最好的语言连兼容性都不支持。
|
147
ClutchBear 2019-10-19 10:36:51 +08:00
@TangMonk #46 我刚刚看了一下, 最新版 goland, 如果 import 一个包没有使用的话, 会自动消失.
其实 pycharm 也有类似的快捷键, ctrl + shifit + o, 自动删除没有使用的包和导入包自动排序, 这个不算是 golang 的的缺点 |
148
TangMonk 2019-10-19 10:44:35 +08:00
@ClutchBear #147 如果有 ide 的话的确可以省掉这个麻烦,但是这个可以做成 warning 级别的错误,他要搞成 error。感觉没这个必要。
|
150
Arnie97 2019-10-19 19:06:30 +08:00 via Android
静态类型检查真香
|
152
fox0001 2019-10-22 23:27:43 +08:00
个人经验。开发一个小网站,python 部署起来比较麻烦,需要安装一堆依赖……go 的话编译后直接运行,而且几乎支持所有平台(不要跟我说 IoT 那种东西)。
|
153
kkl117 2019-10-24 19:11:27 +08:00
我不管 我就要用 go
|