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

Go 到底优势是在哪里?

  •  
  •   upday7 · 57 天前 · 14894 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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