V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gamegrd
V2EX  ›  程序员

看到 GO 这么火,打算学一下,但是文档看到这一句我立即弃坑了。。。

  •  
  •   gamegrd · 2017-06-08 08:32:23 +08:00 · 28812 次点击
    这是一个创建于 2755 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Go 和 Python 在一般开发的平均水平测试中,Go 要比 Python 3 快 25 倍左右,少占用三分之二的内存,但比 Python 大概多写一倍的代码(详见引用 27 )。


    要多撸一倍的代码。。。额滴个神啊
    170 条回复    2019-08-02 23:36:16 +08:00
    1  2  
    leyle
        1
    leyle  
       2017-06-08 08:34:29 +08:00 via iPhone
    直接上手就是干!

    代码量确实多了很多。
    orderc
        2
    orderc  
       2017-06-08 08:34:35 +08:00 via iPhone
    这也算放弃的理由?
    laxenade
        3
    laxenade  
       2017-06-08 08:35:19 +08:00 via Android   ❤️ 5
    你的好友 Java 已上线并表示不服
    gamegrd
        4
    gamegrd  
    OP
       2017-06-08 08:35:31 +08:00   ❤️ 8
    难怪有个梗是对于一个需求,java 的程序员在写配置的时候,go 程序员已经写了大部分代码,但是当 java 的程序员写完的时候,go 程序员还在写 err != nil。
    fyibmsd
        5
    fyibmsd  
       2017-06-08 08:35:36 +08:00
    那 java 和 oc 你更不会学了
    gamegrd
        6
    gamegrd  
    OP
       2017-06-08 08:36:32 +08:00   ❤️ 2
    任何要多写代码的新语言都是耍流氓,科技应该让人更轻松,而不是更累
    cashew
        7
    cashew  
       2017-06-08 08:36:46 +08:00
    才多一倍你就放弃了?这很 JAVA。。。
    gamegrd
        8
    gamegrd  
    OP
       2017-06-08 08:38:49 +08:00
    @fyibmsd 恰好这俩我都会。。。只不过学了 python 后就变懒了
    gamegrd
        9
    gamegrd  
    OP
       2017-06-08 08:39:54 +08:00
    @cashew 多一陪。。。 人生最宝贵的就是时间。。多一倍完全没有办法接受啊
    Weixiao0725
        10
    Weixiao0725  
       2017-06-08 08:42:12 +08:00   ❤️ 3
    那你还是别搞计算机了
    zsj950618
        11
    zsj950618  
       2017-06-08 08:43:22 +08:00 via Android
    python 大法好
    zysidea
        12
    zysidea  
       2017-06-08 08:45:52 +08:00 via Android
    这么说,你只适合写 py
    gamegrd
        13
    gamegrd  
    OP
       2017-06-08 08:47:33 +08:00
    @zysidea 一直在寻求比 python 编写效率更高的语言。。。最好能别人一天的工作量,新语言 10 分钟就完成
    zhujinliang
        14
    zhujinliang  
       2017-06-08 08:48:35 +08:00
    键盘很贵么
    nomoon
        15
    nomoon  
       2017-06-08 08:52:44 +08:00
    python 的多线程。。。>_>
    timothyye
        16
    timothyye  
       2017-06-08 08:53:21 +08:00 via Android
    现在全职 go 开发,也写过 py
    py 感觉代码确实写起来简洁
    weer0026
        17
    weer0026  
       2017-06-08 08:53:44 +08:00
    多一倍代码就能把一个高并发接口的速度提上去已经够好了,简单无脑就是花点时间。
    bfbd
        18
    bfbd  
       2017-06-08 08:55:05 +08:00
    Go 语言就是 Super C,是更好的 C++。
    yqf3139
        19
    yqf3139  
       2017-06-08 08:55:36 +08:00
    之前看到过这个项目,但没有尝试过。Grumpy:Google 用 Go 开发的 Python 运行时
    tvallday
        20
    tvallday  
       2017-06-08 08:56:00 +08:00 via Android
    程序员的代码量比当老板的多几十倍,我是否应该弃坑?
    bombless
        21
    bombless  
       2017-06-08 08:56:42 +08:00 via Android
    go 其实是复制黏贴的多,也没必要被吓到
    jeffersonpig
        22
    jeffersonpig  
       2017-06-08 08:58:48 +08:00
    最好是出一种开发同样功能代码量比 python 还少一半但是性能又比 C 还好的新语言 23333
    tongtf
        23
    tongtf  
       2017-06-08 09:03:20 +08:00
    @gamegrd 我能说 shell 吗?
    lwbjing
        24
    lwbjing  
       2017-06-08 09:07:31 +08:00
    又想吃的少,又想跑的快,哪有那么好的事儿啊。。
    Immortal
        25
    Immortal  
       2017-06-08 09:07:53 +08:00
    什么理由都想到了...就是没想到这个
    假设 25 倍性能是真的,多一倍开发时间换来节约 25 倍的运行时间,不是很赚么
    而且现在虽然我是全职 go,一些简单的脚本什么的也会用 shell php python 写,这个不冲突
    并不是写了 go 就不能写别的了
    scnace
        26
    scnace  
       2017-06-08 09:08:45 +08:00 via Android
    严谨的错误处理有什么错?
    zts1993
        27
    zts1993  
       2017-06-08 09:10:04 +08:00
    代码量 != 需要得时间

    相反静态强类型在未来重构和修改甚至调试得时候都会有更大得优势.....debug 时间也得算啊..
    zdt3476
        28
    zdt3476  
       2017-06-08 09:10:07 +08:00   ❤️ 3
    然后 go 代码上线正常运行,python 还在处理各种运行时异常
    owenliang
        29
    owenliang  
       2017-06-08 09:14:56 +08:00 via Android
    关键看能不能边拿薪水边学 go。
    Xrong
        30
    Xrong  
       2017-06-08 09:15:08 +08:00   ❤️ 2
    个人觉得提高性能价值远高于 2 倍的代码量
    congeec
        31
    congeec  
       2017-06-08 09:16:07 +08:00
    除了丰富的库,还不如用 C++
    owenliang
        32
    owenliang  
       2017-06-08 09:18:42 +08:00 via Android
    @congeec 我也这么觉得
    RW667
        33
    RW667  
       2017-06-08 09:18:55 +08:00
    方法名必需大写,表示从 JAVA 系转过来的人不能忍
    zoffy
        34
    zoffy  
       2017-06-08 09:19:05 +08:00
    @gamegrd #13 别担心,人类也就剩下十年写代码的时间了
    clino
        35
    clino  
       2017-06-08 09:25:19 +08:00
    静态语言和动态语言就不要比代码量了,性能和开发效率要有取舍,go 在开发效率上和其他静态语言比应该还是有优势的
    Kilerd
        36
    Kilerd  
       2017-06-08 09:26:12 +08:00 via iPhone
    @RW667 主要是方法名这样才反人类 itLooksLikeThis
    Sapp
        37
    Sapp  
       2017-06-08 09:27:56 +08:00
    @gamegrd 你可以看看 rails...
    mattx
        38
    mattx  
       2017-06-08 09:30:31 +08:00
    这里应该没算上, python 不要使用括号吧?
    Unknwon
        39
    Unknwon  
       2017-06-08 09:32:05 +08:00
    没别的意思。。我就觉得楼主没写过上万行非机器编译代码的项目吧?。。。重构起来你就知道多写几行救了你的命。
    nanjishidu
        40
    nanjishidu  
       2017-06-08 09:32:32 +08:00
    你的大 python 难道没有引入了各种包。。。
    flyspace15
        41
    flyspace15  
       2017-06-08 09:35:41 +08:00
    不能只看开发量,还要看维护量,python 开发起来可能多一倍,维护起来可能要多好几倍
    gesse
        42
    gesse  
       2017-06-08 09:37:26 +08:00
    项目用什么语言你说了算?
    swors
        43
    swors  
       2017-06-08 09:37:37 +08:00
    实际使用并没有这种感觉, 大家都不用外部库的情况下
    singlepig
        44
    singlepig  
       2017-06-08 09:43:01 +08:00
    如果大家都会你所希望的新语言, 那你还有什么用?为什么不用别人要用你?
    配合补全工具,你实际敲的代码能多多少?只凭长短论好坏不觉得太武断了么?
    kopp123
        45
    kopp123  
       2017-06-08 09:44:03 +08:00   ❤️ 2
    麻痹的。每次看到别人的代码我就火大。一大堆乱七八糟的英文单词,什么 interface,class 不懂他们写的什么。一个简单的功能就要码很多很多字,反观我的代码,看过了就是 mov ....,妈的写个程序还要学这么多英文单词你们烦不烦。对了我认识一位大神他都是只写数字的。
    mengzhuo
        46
    mengzhuo  
       2017-06-08 09:49:06 +08:00
    动态一时爽,重构火葬场
    5 年 Python 开发经验告诉我的
    SuperMild
        47
    SuperMild  
       2017-06-08 09:50:37 +08:00
    只说一点(楼上也有人提到过了),代码量 不等于 写代码的时间。

    写代码主要花时间的地方是思考而不是打字。
    Morriaty
        48
    Morriaty  
       2017-06-08 09:52:12 +08:00
    你要是写并发的代码,用 python 写的代码量和花的时间比 go 少一倍,我就佩服你 python 水平是真的高。

    非要纠结说 go 没有`[i for i in list1]`这种的简洁代码,那是你眼界低。
    CEBBCAT
        49
    CEBBCAT  
       2017-06-08 09:55:17 +08:00 via Android
    同学,你快醒醒!单片机上跑不了 Python,还好可以汇编
    gaoyadianta
        50
    gaoyadianta  
       2017-06-08 09:56:38 +08:00
    @kopp123 写单词也吐槽?应该就是这样的吧,用拼音也好过用数字吧,那什么大神写的代码别人都读不懂吧
    jarlyyn
        51
    jarlyyn  
       2017-06-08 10:00:54 +08:00 via Android
    @gaoyadianta

    别人在说汇编吧……
    cloud107202
        52
    cloud107202  
       2017-06-08 10:02:17 +08:00   ❤️ 7
    nws12304508
        53
    nws12304508  
       2017-06-08 10:03:04 +08:00
    感觉工作量 不在于代码的多少啊
    gaoyadianta
        54
    gaoyadianta  
       2017-06-08 10:03:10 +08:00
    @jarlyyn 额。。。好吧,mov,没想到会提到汇编
    feiyuanqiu
        55
    feiyuanqiu  
       2017-06-08 10:06:21 +08:00
    @gaoyadianta 他在说 asm 的梗,另一位只写数字的是直接撸机器码
    tomoya92
        56
    tomoya92  
       2017-06-08 10:10:47 +08:00
    @gamegrd #13 你也可以试试 kotlin
    janxin
        57
    janxin  
       2017-06-08 10:13:06 +08:00 via iPhone   ❤️ 1
    @CEBBCAT 单片机上已经可以跑 python 了
    longxboy
        58
    longxboy  
       2017-06-08 10:13:08 +08:00
    实际开发效率并不比 python 慢多少
    mooncakejs
        59
    mooncakejs  
       2017-06-08 10:15:14 +08:00
    学了 python 是代码是变少了, 可是晚上也睡不好觉了,整天担心会不会跑出问题。
    lizon
        60
    lizon  
       2017-06-08 10:16:10 +08:00
    多写一倍严谨的错误处理代码而已,你算算 python debug 的时间和 golang debug 的时间,再来考虑性价比
    whatTheGhost
        61
    whatTheGhost  
       2017-06-08 10:27:44 +08:00   ❤️ 1
    @bfbd super C 没问题,更好的 C++就呵呵了。
    xjl
        62
    xjl  
       2017-06-08 10:31:38 +08:00
    Python2 Python3 怎么没人提? Go 向下兼容
    SuperMild
        63
    SuperMild  
       2017-06-08 10:32:48 +08:00
    @cloud107202 这个视频说得对,golang 语言本身学起来甚至比 python 更容易,运行效率又高。
    wangleineo
        64
    wangleineo  
       2017-06-08 10:33:39 +08:00
    这只能说明 python 的简洁,其实 go 已经非常简洁了,当然除了错误处理。
    bk201
        65
    bk201  
       2017-06-08 10:35:13 +08:00
    为什么要黑 java,你觉得多可以用 java 8 新特性,还多可以用 groovy 等等。
    beyoung
        66
    beyoung  
       2017-06-08 10:39:16 +08:00
    只需要两倍的代码 能快 25 倍 你还想怎样 楼主?
    kinghui
        67
    kinghui  
       2017-06-08 10:43:29 +08:00
    任何语言重构如果没有测试和测试覆盖率保证的话都是火葬场吧, 编译型语言能保证编译通过还能保证运行时没问题? 保证逻辑正常? 如果可以的话也就没有 NULL 造成十亿美元损失这一说了.
    goophy
        68
    goophy  
       2017-06-08 10:45:58 +08:00   ❤️ 2
    反正自从用 go 以后,可以看懂别人的代码了  :)
    raptor
        69
    raptor  
       2017-06-08 10:54:56 +08:00
    多一倍而已,想想 JAVA,至少多十倍
    CEBBCAT
        70
    CEBBCAT  
       2017-06-08 10:54:58 +08:00 via Android
    @janxin 感谢指正

    诶妈,我得赶紧看看相关博客
    SourceMan
        71
    SourceMan  
       2017-06-08 10:57:30 +08:00
    不要给自己找借口。
    坚持才是胜利
    jiangzhuo
        72
    jiangzhuo  
       2017-06-08 11:05:30 +08:00
    对于按代码行数计价的来说,这是个好事啊
    owenliang
        73
    owenliang  
       2017-06-08 11:07:02 +08:00
    公司不用,学来做啥?
    Ouyangan
        74
    Ouyangan  
       2017-06-08 11:16:22 +08:00
    @goophy #68 同感 , 看很多 go 第三方库的源码感觉比 java 好懂一点 ,没那么模式 , 简单明了
    zzn
        75
    zzn  
       2017-06-08 11:26:22 +08:00
    突然想起了之前有人喷 Golang 静态编译的问题,真是搞笑
    simo
        76
    simo  
       2017-06-08 11:31:53 +08:00
    先了解下 go 主要应用的场景。
    在语言层面,要和 c/cpp 对比。
    反正个人很喜欢 go,协程和跨平台编译用起来非常顺手。
    另,语言只是工具,学什么问题不大,精通一门,其他的语言学起来很快的,可以快速解决问题。
    winglight2016
        77
    winglight2016  
       2017-06-08 11:43:42 +08:00
    @RW667 没错,大写不能忍。。。
    gamexg
        78
    gamexg  
       2017-06-08 12:11:56 +08:00 via Android
    主要是静态类型及 err。
    静态类型没办法,而且觉得是好处,静态类型的自动补全很牛。py 由于不是静态类型,重构时很坑。

    err 有用 ide 的话还好,直接打个 err 就能够自动补全 if err !=nil 等等。
    scofieldpeng
        79
    scofieldpeng  
       2017-06-08 12:13:01 +08:00
    自从全职搞 golang 之后,心情爽多了,我还是喜欢强类型语言,虽然有时候类型转换是很麻烦
    cchange
        80
    cchange  
       2017-06-08 12:15:11 +08:00 via iPhone
    @mengzhuo 愿闻其详
    sgissb1
        81
    sgissb1  
       2017-06-08 12:24:29 +08:00   ❤️ 3
    lz,把我们 c、c++程序员放哪了?

    同样一个字符串处理的功能,其他语言或许只要一行代码就够,我们 c、c++的程序员这辈子估计都写不完(就算用上 stl 和 boost )
    SuperMild
        82
    SuperMild  
       2017-06-08 12:29:07 +08:00
    @sgissb1 还是能写完的,只要用人类语言写一段格式要求发给用户 ( 233
    orvice
        83
    orvice  
       2017-06-08 12:29:44 +08:00
    @gamegrd 多一倍代码 不代表多一倍时间。
    Limius
        84
    Limius  
       2017-06-08 12:29:53 +08:00
    @gamegrd 多一倍代码不等同于多一倍时间。
    sgissb1
        85
    sgissb1  
       2017-06-08 12:31:42 +08:00
    @SuperMild 你这是强规则。。。。。。要是弱规则,你写个试试。还有异常处理!
    gowk
        86
    gowk  
       2017-06-08 12:37:49 +08:00   ❤️ 3
    又少了一个不合格的 Gopher,我表示很庆幸
    jjx
        87
    jjx  
       2017-06-08 12:42:08 +08:00 via iPhone
    两个都在用,如果写企业软件,几倍吧,不是一倍,lz
    HarveyDent
        88
    HarveyDent  
       2017-06-08 13:09:59 +08:00
    脚本小子
    Sin
        89
    Sin  
       2017-06-08 13:10:25 +08:00
    前端程序员表示看完你们撕逼回去继续默默撸 js
    tiancaiamao
        90
    tiancaiamao  
       2017-06-08 13:24:48 +08:00   ❤️ 1
    F#呀!
    如果你又想语言表达能力强,代码简短,又想要性能 。你需要的是一门**面向工程实践的函数式语言**。
    但是你学不会,所以就不安利 Haskell 了。

    语言的抽象程度高,表达能力强 -> 性能差 (lisp ruby python)
    语言接近汇编,性能强 -> 代码罗嗦 (c 汇编)
    语言的表达能力强,性能也不差 -> 学成成本高 (F# ocaml)
    语言简洁,性能不差,学习简单 -> 难道 Go 不是么???
    herozzm
        91
    herozzm  
       2017-06-08 13:28:08 +08:00 via Android
    写了 go 之后,头发不掉了,自信心增强了,薪水也上来了
    mengzhuo
        92
    mengzhuo  
       2017-06-08 13:40:37 +08:00
    @cchange
    比如 debug 发现猪队友往字符数组里传数字,关键是他为了方便,自己写的函数都不报错不输出,导致 API 传出了数字,客户端跪了。
    滥用 metaclass,不运行都不知道里面是什么
    还有最经典的,操作符重载,你知道发现+ 被重载成了别的函数时,那是相当崩溃(看代码才最后发现的)
    patr0nus
        93
    patr0nus  
       2017-06-08 13:56:20 +08:00
    @bfbd 不太好这么比,定位还是有区别的。毕竟 Go 还需要 gc,想和 C/C++ 正面刚的貌似只有 Rust,它是宣称 zero-cost abstractions 的。
    linus3389
        94
    linus3389  
       2017-06-08 14:27:30 +08:00
    她说的是编译时各种静态 lib 都带上为了能够 standalone 吧?

    现在硬盘这么便宜,这点体积真的需要担心?

    真要说代码量,人家 Java 默默不说话。
    gamegrd
        95
    gamegrd  
    OP
       2017-06-08 14:29:16 +08:00
    @nomoon 加核 加内存加网络 堆硬件
    CRVV
        96
    CRVV  
       2017-06-08 14:33:55 +08:00
    这个事取决于你要做什么东西,比如 ss 的代码,用 `wc -l ./**/*.go` 和 `wc -l ./**/*.py` 统计的结果是
    Go (5c6f652) 2841 行
    Python (d5026cf) 6682 行

    要多写 1.35 倍的代码
    BiuBiuBiuX
        97
    BiuBiuBiuX  
       2017-06-08 14:35:53 +08:00
    @fyibmsd 额,OC 主要是方法名长。。。JAVA 是废话多。。。OC 用编译器提示,也不长
    patx
        98
    patx  
       2017-06-08 14:39:01 +08:00 via Android
    改行不做程序员,完全不写代码
    araraloren
        99
    araraloren  
       2017-06-08 14:39:13 +08:00
    @xjl
    python2 3 更像是两个语言,只是叫 python 而已,
    就像 perl5 6,两个语言版本差异很大,和传统的语言版本不一样
    araraloren
        100
    araraloren  
       2017-06-08 14:43:57 +08:00
    @patr0nus rust 不 cost 计算机,cost 的是程序员的大脑

    @gamegrd 楼主尝试过 ruby perl 么,python 的哲学 写起代码来其实并不飘逸。。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3593 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:46 · PVG 12:46 · LAX 20:46 · JFK 23:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.