V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
upday7
V2EX  ›  Go 编程语言

Go 到底优势是在哪里?

  •  
  •   upday7 · 2019-10-17 17:24:00 +08:00 · 21596 次点击
    这是一个创建于 1642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们现在的项目是用的 django+restful 做接口,最近接触到很多 go 的内容,被网络上的讨论有点弄晕了。如果做接口后端,为什么 go 比 python 有优势,除了速度这些还有什么?

    第 1 条附言  ·  2019-10-17 23:02:26 +08:00
    感觉这个帖子突然开始引战了。。。我们现在就是 gunicorn 裸跑在阿里云的 docker 里,😂,前面有用阿里的负载均衡,其他的都还好感觉再来几万用户都不是问题,所以才有这疑问,就是比较一下 go 和 django/python 的应用场景。
    153 条回复    2019-10-24 19:11:27 +08:00
    1  2  
    snoopygao
        101
    snoopygao  
       2019-10-18 10:24:30 +08:00   ❤️ 3
    别说了,php 是最好的语言
    julyclyde
        102
    julyclyde  
       2019-10-18 10:28:45 +08:00
    @BubbleNoodle kube 也不是“必须用 go 来写”啊
    尤其是那种异步系统,根本没什么性能需求
    marco25
        103
    marco25  
       2019-10-18 10:30:51 +08:00   ❤️ 1
    同意前面说的,django 的封装和优秀的文档使得对 HTTP/HTML 零基础的入门级开发也能很快上手。举两个例子:我学 django 的时候对 HTTP 毫无概念,是做着 django 现学的;我同学是做硬件的自己做了个电商网站卖到国外,当时我推荐他用 django,他毫无网络编程经验,居然看着文档一点点把支付 /后台什么都自己搞定了。没有 django 良好的生态很难想象一个新手能很快做这么完整的项目
    julyclyde
        104
    julyclyde  
       2019-10-18 10:31:36 +08:00
    go 的好处:
    静态类型
    编译出单个文件,基本可以不带运行时依赖
    性能不错
    风格上特别倾向于把外部代码 vendor 进来一起管理,对质量管控稍微有些好处(前提是你真的这么用了。我昨天还刚刚处理一起,在编译阶段使用 wget github master 下载外部代码一起来编译的事故)

    不过这些优点其实主要是 python 的缺点衬托出来的

    我爱 python
    ArtIsPatrick
        105
    ArtIsPatrick  
       2019-10-18 10:40:04 +08:00
    做 web 开发,语言本身的速度不是瓶颈吧,高并发场景都是用协程做的,性能相差并不大。
    chengxiao
        106
    chengxiao  
       2019-10-18 10:49:19 +08:00
    学学呗 我之前也是 python django
    最近在写 go gin 了,差别也没想象中那么大
    语法上适应一下就好了 性能改善是真的 部署是真方便 但是包管理跟 pip 比实在是坑
    Hanggi
        107
    Hanggi  
       2019-10-18 11:03:20 +08:00
    @ArtIsPatrick 你确定吗?试试都把线程开到最大,跑一下 GET 请求 hello world 压测试试?性能差不多?
    yamasa
        108
    yamasa  
       2019-10-18 11:17:36 +08:00
    @optional java 语言特性过时,烂就算了,jvm 你踩啥呢? scala,kotlin 很烂吗?一大堆大数据框架 base 在 jvm 上没见你 go 来统统重构一道把 jvm 踢进历史长河呢?除开云计算 go 有一个领域能跟 jvm 比生态吗? 9102 年了 java/jvm 怎么还没死系列?
    jpacg
        109
    jpacg  
       2019-10-18 11:37:43 +08:00
    @TangMonk 跨平台并不是只有桌面环境,科学上网工具基本都是用 Go 写的,.net core 就做不到了
    mineqiqi
        110
    mineqiqi  
       2019-10-18 11:41:34 +08:00
    来看看 么接触过 go
    qsnow6
        111
    qsnow6  
       2019-10-18 11:41:47 +08:00
    少扯些没用的吧,本身就不是一类语言,整天扯性能问题,静态语言如果不比动态语言性能快,要它何用?

    用动态语言不就图一个敏捷开发,即想即所得么。

    go 要比也是跟 rust、Java 比,php、python 这类动态语言,支撑个 1000qps 很轻松,1000qps 知道什么概念吗?
    a15819620038
        112
    a15819620038  
       2019-10-18 11:42:16 +08:00
    etcd、k8s、prometheus 等等都是 go 写的...
    TangMonk
        113
    TangMonk  
       2019-10-18 11:51:42 +08:00
    jorneyr
        114
    jorneyr  
       2019-10-18 11:57:11 +08:00
    天下武功,唯快不破
    ArtIsPatrick
        115
    ArtIsPatrick  
       2019-10-18 11:58:56 +08:00 via iPhone
    @Hanggi 开线程干嘛? Python 的协程是单线程实现的啊
    mornlight
        116
    mornlight  
       2019-10-18 12:10:37 +08:00
    @zzlettle #41 朋友,好好说话。文字按逻辑分段,你这样几个字一换行群众们看起来很累的。
    optional
        117
    optional  
       2019-10-18 12:14:02 +08:00
    @yamasa jvm 上语言一大堆,还是被 go 咬了一块下来本身就说明问题了。
    ArtIsPatrick
        118
    ArtIsPatrick  
       2019-10-18 12:18:10 +08:00 via iPhone
    @blless 你写过 Python 的高并发吗?还 GIL?
    whyiyhw
        119
    whyiyhw  
       2019-10-18 12:34:09 +08:00 via Android
    我想问下 10W 并发是什么概念,自己心里没数吗? 1 秒 10W 请求跟语言关系还大吗?总感觉不管到哪都是张口就开,工程类不是讲究严谨吗?
    ArtIsPatrick
        120
    ArtIsPatrick  
       2019-10-18 12:37:57 +08:00 via iPhone   ❤️ 1
    Python 的问题在于它是动态脚本语言,本身维护起来就比较困难,再加上语法上有一些技巧又没有和 java 一样强大的规范,导致初学者的代码风格迥异,在系统做大后往往变得难以维护。但是对于一般的 web 高并发场景底层都可以用 libuv 之类的库进行加速。总之需要运行效率的地方用 C 来实现,web 服务本身用 Python,开发效率完爆 java、go 之类的,而且性能也不错。
    hushao
        121
    hushao  
       2019-10-18 12:47:12 +08:00 via iPhone
    优势目前在于轻量线程及云部署,至于并发、Django 中小公司及个人根本达不到瓶颈的地步。
    至于 go,我也考虑过代替 Python 的 web 开发,撇开兴趣,真想不到非用不可的理由
    Hanggi
        122
    Hanggi  
       2019-10-18 12:51:17 +08:00
    @ArtIsPatrick 就是说让你多开几个实例,不然不够看。
    ArtIsPatrick
        123
    ArtIsPatrick  
       2019-10-18 12:57:41 +08:00 via iPhone
    @Hanggi Python 原生的异步 IO 和 go 还是有很大差距的。
    salamanderMH
        124
    salamanderMH  
       2019-10-18 12:58:52 +08:00
    现在 go 有 go module 也很方便
    kemikemian
        125
    kemikemian  
       2019-10-18 13:09:12 +08:00
    有位大哥叨叨好几堆文字,不知道为什么这么气氛。
    go 和 python 定位不同。go 并不是为了用来替换 python 的,是弥补 C 的不足。
    说 python 多好多好,也不过是生态完善。python 多少年,go 多少年
    ihciah
        126
    ihciah  
       2019-10-18 13:16:30 +08:00
    CSP 模型用起来舒服啊
    blless
        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 还真是不够用。
    wuwukai007
        128
    wuwukai007  
       2019-10-18 14:09:53 +08:00
    小姐姐都在用的 ins 就是 django+uwsgi+nginx 开发的啊,人家月活跃量 全球 20 亿 ,我觉得除了淘宝,12306 啥的,有那么多的高并发需求吗??
    咱能不能别张口闭口高并发了,多考虑业务逻辑复杂度吧!
    abcbuzhiming
        129
    abcbuzhiming  
       2019-10-18 14:26:32 +08:00
    @TangMonk 你如果接触的比较多的就会发现后端语言在应用领域是趋同的,都是图灵完备语言所以彼此的功能都能换个语言实现。但是 go 有一个不太一样的特点是,在玩意是没有虚拟机的,因为没有虚拟机,这玩意在低延迟和低内存占用上有特别的优势,dotnet core 的对手是同样有虚拟机的 jvm,go 的对手严格来说目前没有同对位上的,因此 go 一定有自己的生存空间,直到有一个在特性上和自己对位的竞争对手来和自己竞争
    TangMonk
        130
    TangMonk  
       2019-10-18 14:31:53 +08:00
    @abcbuzhiming #129 我感谢有没有虚拟机问题并不大,实际上 golang 和.net core 的性能差距并不大
    BlameKidd
        131
    BlameKidd  
       2019-10-18 14:35:39 +08:00
    你们学编程都好强啊, 我这个渣渣只面向工资编程简直惭愧.
    不说别的, 我只知道 Go 开发比 python 开发工资高.
    ml071987
        132
    ml071987  
       2019-10-18 14:45:25 +08:00
    看你们吵来吵去真有意思
    两种语言各有优势和应用场景,有啥好吵的
    为什么不都用呢,谁规定程序员就使用一种语言了
    charlie21
        133
    charlie21  
       2019-10-18 14:51:47 +08:00
    @ml071987 互联网这么大,不出几个喷子你以为活在天堂
    lazyfighter
        134
    lazyfighter  
       2019-10-18 15:28:49 +08:00
    在我看来 go 适合写中间件尤其以 proxy 为主,并不适合写业务,写业务还是 java,没写过 php
    kkeiko
        135
    kkeiko  
       2019-10-18 15:50:33 +08:00
    ./bin 这就是优势
    netherlanddennis
        136
    netherlanddennis  
       2019-10-18 16:08:49 +08:00
    @lazyfighter
    看了那么多。只有你扯到重点了。go 唯一的适用场景就是中间件。并发高。耦合度低的。
    要论业务开发。还是 java。php..python 这些
    AX5N
        137
    AX5N  
       2019-10-18 16:17:14 +08:00   ❤️ 1
    @netherlanddennis 你可以看下 99 楼
    netherlanddennis
        138
    netherlanddennis  
       2019-10-18 16:21:13 +08:00
    @AX5N
    恩。99 楼也对。个人比较认可。
    只不过这种东西嘛。都是见人见智的。
    d1973
        139
    d1973  
       2019-10-18 16:25:12 +08:00
    别说了,Java 是最好的编程语言没有之一
    littlewing
        140
    littlewing  
       2019-10-18 16:42:42 +08:00
    goroutine
    dodo2012
        141
    dodo2012  
       2019-10-18 16:42:58 +08:00
    论开发速度,rails 不是看不起在座的,性能?先上线再说,鬼知道能撑多久
    gaigechunfeng
        142
    gaigechunfeng  
       2019-10-18 17:08:16 +08:00
    @zzlettle 我们团队就搞 spring,老铁认为如何。 有时也会想切一下技术栈,但是迫于 spring 良好的生态,没舍得换
    lbp0200
        143
    lbp0200  
       2019-10-18 17:11:15 +08:00
    @dodo2012 ror +1
    encro
        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 最好,
    ...
    skinny
        145
    skinny  
       2019-10-18 18:25:20 +08:00
    爬虫的瓶颈难道不是在带宽、IP 池、反爬限制程度上吗?跟语言效率有什么关系?你以为实际的爬虫跟那些 GitHub 上的手撸爬虫学习小例子一样写个几行代码,然后一顿操作猛如虎,要么搞瘫别人服务器,要么全被 BAN,要么一堆脏数据?!
    liulaomo
        146
    liulaomo  
       2019-10-18 20:24:42 +08:00
    几年前搭了一个本地个人 wiki,使用了一个开源的 php wiki 软件(目前已经不再维护了)。后来荒废了。最近准备把它重新运行起来,整理一下里面的内容。擦,老的开源的 php wiki 软件的代码竟然不能在最新的 php 上运行,n 多语法错误。服了,世界上最好的语言连兼容性都不支持。
    ClutchBear
        147
    ClutchBear  
       2019-10-19 10:36:51 +08:00
    @TangMonk #46 我刚刚看了一下, 最新版 goland, 如果 import 一个包没有使用的话, 会自动消失.
    其实 pycharm 也有类似的快捷键, ctrl + shifit + o, 自动删除没有使用的包和导入包自动排序,
    这个不算是 golang 的的缺点
    TangMonk
        148
    TangMonk  
       2019-10-19 10:44:35 +08:00
    @ClutchBear #147 如果有 ide 的话的确可以省掉这个麻烦,但是这个可以做成 warning 级别的错误,他要搞成 error。感觉没这个必要。
    reus
        149
    reus  
       2019-10-19 13:54:08 +08:00
    @TangMonk 用 goimports 做格式化,自动去掉的,vim, vscode 都可以用
    Arnie97
        150
    Arnie97  
       2019-10-19 19:06:30 +08:00 via Android
    静态类型检查真香
    0x000007b
        151
    0x000007b  
       2019-10-20 09:19:15 +08:00
    @reus 咕咕咕咕咕咕咕
    fox0001
        152
    fox0001  
       2019-10-22 23:27:43 +08:00
    个人经验。开发一个小网站,python 部署起来比较麻烦,需要安装一堆依赖……go 的话编译后直接运行,而且几乎支持所有平台(不要跟我说 IoT 那种东西)。
    kkl117
        153
    kkl117  
       2019-10-24 19:11:27 +08:00
    我不管 我就要用 go
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5616 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.