首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  程序员

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

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

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

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

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

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

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

    无论用什么语言,都最终要皈依实际生产 /研究的需求,故步不前的语言&程序员,是肯定要被淘汰的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3813 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 07:38 · PVG 15:38 · LAX 00:38 · JFK 03:38
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1