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

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

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

    如题,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
    简单好用就行
    ZSeptember
        11
    ZSeptember  
       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   ·   实用小工具   ·   5063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:40 · PVG 17:40 · LAX 01:40 · JFK 04:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.