C/C++ 和 Go 都能生成静态链接的二进制文件,那么 Go 的优势在哪里?(无 IO 高并发需求) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
feng32
V2EX    程序员

C/C++ 和 Go 都能生成静态链接的二进制文件,那么 Go 的优势在哪里?(无 IO 高并发需求)

  •  
  •   feng32 2019-01-22 10:23:52 +08:00 7203 次点击
    这是一个创建于 2454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,C/C++ 和 Go 都能生成静态链接的二进制文件,那么 Go 的优势在哪里?(无 IO 高并发需求)

    41 条回复    2019-01-23 10:43:14 +08:00
    mooncakejs
        1
    mooncakejs  
       2019-01-22 10:25:12 +08:00   4
    优势就是 c++太难了,不是写代码太难了,而是组建一个风格统一的团队太难了。
    owenliang
        2
    owenliang  
       2019-01-22 10:27:02 +08:00
    没有 IO 要求,没有高并发要求,那么你做的是客户端软件?
    liuguang
        3
    liuguang  
       2019-01-22 10:28:07 +08:00
    go 语言自带各种功能库,C++自己除了语言定义之外,功能库几乎没有,要到处找其它类库,
    lucifer9
        4
    lucifer9  
       2019-01-22 10:35:47 +08:00
    要针对特定例子的话还真不好说
    比如 taglib 这个库
    或者找个 go 的库,用来处理 flac 文件 metadata,读写各种 block 的
    misaka19000
        5
    misaka19000  
       2019-01-22 10:39:13 +08:00
    写起来爽,这个优势就足够了
    kingwl
        6
    kingwl  
       2019-01-22 10:41:21 +08:00   5
    和 go 比起来...还是更愿意写 c++

    不知道哪里写起来爽? 是 err != nil 爽还是 type switch 爽?
    icexin
        7
    icexin  
       2019-01-22 11:00:15 +08:00   3
    标准库涵盖了大部分场景,即使第三方库,看中了 github 上的哪个库,直接 import,自动分析依赖。带 gc,心智负担小。总之一句话,不折腾。
    GuangXiN
        8
    GuangXiN  
       2019-01-22 11:03:18 +08:00
    和 C/C++相比
    - go 有 gc
    - go 有 go 和 chan

    和 C++相比
    - go 没有 class
    salamanderMH
        9
    salamanderMH  
       2019-01-22 11:17:13 +08:00
    go 简单好用
    vx2018
        10
    vx2018  
       2019-01-22 11:22:46 +08:00
    简单好用就行
    looplj
        11
    looplj  
       2019-01-22 11:24:18 +08:00
    唯一的优势就是简单吧,有 GC 和无 GC 的完全不一样。
    ThomasZ
        12
    ThomasZ  
       2019-01-22 11:28:49 +08:00 via Android
    简单,敏捷
    reus
        13
    reus  
       2019-01-22 11:41:21 +08:00
    @lucifer9 https://github.com/dhowden/tag 随手都能找得出来。就算没有,自己根据格式规范写也很容易,几十行的东西
    nicevar
        14
    nicevar  
       2019-01-22 11:45:55 +08:00
    go 开发效率高,有 gc,能降低能力不足者代码风险
    littlewing
        15
    littlewing  
       2019-01-22 12:17:40 +08:00
    不会段错误
    loading
        16
    loading  
       2019-01-22 12:55:39 +08:00 via Android
    gofmt 就能让我爱上 go
    ibreaker
        17
    ibreaker  
       2019-01-22 13:06:33 +08:00
    @littlewing 空指针也算段错
    KgM4gLtF0shViDH3
        18
    KgM4gLtF0shViDH3  
       2019-01-22 13:12:09 +08:00 via iPhone
    开发快编译快,难道你用 cpp 去写 web ?
    zjsxwc
        19
    zjsxwc  
       2019-01-22 13:16:14 +08:00
    强类型比弱类型更规范点吧
    May725
        20
    May725  
       2019-01-22 13:28:35 +08:00
    编译真的快;第三方包使用方便;够简单,统一,即使有些语法另类,但写 c++时需要自己注意细节问题; 如果让我选,我选 go。
    yesono
        21
    yesono  
       2019-01-22 13:31:24 +08:00
    从运维角度,go 只依赖 glibc,而 C++ 不行,如果用到其它库 so,引用各种 so 文件,go 打包 docker 更小。C++打包 docker,各种 so 库依赖要处理。
    reus
        22
    reus  
       2019-01-22 14:55:43 +08:00
    @ibreaker 空指针只会抛出 fatal error,不是段错误。段错误连调用栈都没的
    lucifer9
        23
    lucifer9  
       2019-01-22 15:06:29 +08:00
    @reus #13 这个没法写入。taglib 本身给的 C binding 就没写入的 API,自己写没那么容易。Rust 有写入 flac 的叫 metaflac,是独立实现的 你可以看看有几行
    GeruzoniAnsasu
        24
    GeruzoniAnsasu  
       2019-01-22 15:23:43 +08:00
    go 的下限刚好在 “写出没法用的代码”以上 意味着 golang 不管多傻逼的人来写,只会写出逻辑 bug,不会写出调试不了不科学不能跑的代码

    c++,嚯,那就不一样了,没人知道自己写的代码对不对,只知道“在特定情况下似乎不会崩”
    buhi
        25
    buhi  
       2019-01-22 15:31:51 +08:00
    go 就是给码畜农场主用的万金油速效增肥饲料, c++就是原生态农家饲料
    reus
        26
    reus  
       2019-01-22 15:58:04 +08:00
    @lucifer9 flac 格式都是公开的,写个 decoder/encoder 真的不难。rust 连 u64_to_le_bytes 这种都要自己写,代码多不奇怪。
    这里就有个 encoder: https://github.com/mewkiz/flac
    funcman
        27
    funcman  
       2019-01-22 18:00:24 +08:00 via iPhone
    非 C 语言的 Native 语言,不好在工程里随便用的原因是 ABI 比较复杂,需要折腾 Wrapper。
    hilbertz
        28
    hilbertz  
       2019-01-22 18:15:01 +08:00
    @buhi 精屁,go 就是规定好条条框框,你只有这几种选择,所以即不会写的很烂,也不会写得很好,就是工厂化的产品,但如果有点追求的,就会很快不满足与此
    blless
        29
    blless  
       2019-01-22 18:42:04 +08:00 via Android
    完整工具链,包括 fmt vet test benchmark,包管理方便(只要一个 git,就相当于有代码仓库)静态链接,跨平台编译 /开发,性能良好,自带 gc,协程……
    c++这样一套起来也是各种条条框框,说不定还更厉害,所以我用 go
    iRiven
        30
    iRiven  
       2019-01-22 18:42:23 +08:00 via Android
    go 简单
    OvLOrz
        31
    OvLOrz  
       2019-01-22 20:04:15 +08:00
    无论你之前用 Java、Python 还是 C,都可以转 Go,无缝衔接,抄起键盘就是干
    RubyJack
        32
    RubyJack  
       2019-01-22 20:15:36 +08:00
    简单
    young6
        33
    young6  
       2019-01-22 23:20:06 +08:00 via Android
    Go 是真正做到了 KISS,和 C 一样。
    lynskylate
        34
    lynskylate  
       2019-01-22 23:36:47 +08:00 via Android
    就一个包管理就超越了 c 艹,bazel 主流库支持的太少了。
    12101111
        35
    12101111  
       2019-01-22 23:42:32 +08:00 via Android
    @reus https://doc.rust-lang.org/stable/std/primitive.u64.html#method.to_le_bytes
    另外,除了学习曲线,和编译速度,不觉得 go 相对于 rust 有优势,尤其是大型项目。
    SuperMild
        36
    SuperMild  
       2019-01-23 00:26:18 +08:00 via iPhone
    @12101111 rust 确实优秀,可是语法也确实变态,刚开始写起来很心累啊
    reus
        37
    reus  
       2019-01-23 08:36:09 +08:00
    @12101111 既然如此,为什么现在线上跑的 rust 写的后端系统,比 go 少那么多?既然有优势,为什么不用?难道他们都很傻?
    zzzhbooo
        38
    zzzhbooo  
       2019-01-23 09:30:15 +08:00
    部署方便,不需要花过多的时间在库的依赖上,自带库丰富,社区活跃
    lucifer9
        39
    lucifer9  
       2019-01-23 10:18:48 +08:00
    @reus #37 这个得看背后站着的是谁。
    guanhui07
        40
    guanhui07  
       2019-01-23 10:39:46 +08:00
    开发快编译快
    wind3110991
        41
    wind3110991  
       2019-01-23 10:43:14 +08:00
    无论你的需求点在哪里,GO 我觉得下面几个点是优势:

    1、语言级别的协程 goroutine,支持高并发的同时,降低了开发过程存在的一些线程安全风险,在保障了性能的同时还能够容易上手,很适合作为创业公司的服务器开发语言;

    2、对于 C++开发,最大的问题就是 不是在 gdb 查看 core dump,就是在找 core dump 的路上,对于不同层次的程序员,一门有 gc 机制的语言,能够大大降低协同开发的交付风险和故障定位时间。

    3、相比下 go 有着丰富的库和方便的管理方式,c++编译大工程文件时,简直是反人类,特别是接手来历不明的代码,除了一堆未知的问题,编译的速度也是感人。

    4、golang 的定位,你为什么用 golang 而不是用 c/c++ 如果把语言栈比作武功修炼技能的话:golang 是凌波微步和六脉神剑,C++更像是基础的轻功和内功修炼。就像你利用 golang 的框架可以快速上手写一些简单应用,golang 更多是一门生产语言。在学 c++时,感觉写半个月都憋不出什么东西来,但是它无形中提升的,是你对编程另一个层次的能力。

    5、如果是写一些简单的 http 接口或者应用,你会用 c++么。。。
    https://www.zhihu.com/question/57404512

    无论用什么语言,都最终要皈依实际生产 /研究的需求,故步不前的语言&程序员,是肯定要被淘汰的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     886 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:25 PVG 06:25 LAX 15:25 JFK 18:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86