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

萌新求问, Golang 和 C++我应该选择哪一个作为备用语言?

  •  
  •   wesall100200 · 2019-04-09 15:15:49 +08:00 · 9940 次点击
    这是一个创建于 1815 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在主力是 Java,不得不说 Java 真的很强悍,跨平台而且库多,可以搞定 CRUD 的 95%需求。
    然而我有时候觉得 Java 处理效率太慢了,想写一些计算机网络底层的貌似也比较受限(比如发个 icmp 包之类的,只看到官方实现了 UDP 和 TCP)。
    经过一番搜寻,比较满意的是 Golang 和 C++。对 Go 这门语言,印象最深的是可以编译出 N 个 exe 执行文件,貌似性能也算不错。
    还有一门 C++,据说是和 Java 对标的,但是感觉会不会性能提升上去开发效率却降下来了,库又不多。。。 萌新求指教,谢谢大佬!

    99 条回复    2019-08-17 13:25:49 +08:00
    AngryPanda
        1
    AngryPanda  
       2019-04-09 15:20:43 +08:00   ❤️ 25
    还有一门 C++,据说是和 Java 对标的???
    SuperMild
        2
    SuperMild  
       2019-04-09 15:21:13 +08:00
    Rust 应该会比 C++好用一点,性能比 Go 高一丢丢。
    chenqh
        3
    chenqh  
       2019-04-09 15:21:51 +08:00 via Android   ❤️ 3
    java 处理效率还低?
    whi147
        4
    whi147  
       2019-04-09 15:25:08 +08:00
    C++是在内存上动手术刀,不小心就空指针崩溃。GO 解决了这些问题,不用担心指针问题
    whi147
        5
    whi147  
       2019-04-09 15:26:19 +08:00
    当初要是有选择,我也选择 java,C++真是太难了。
    junjieyuanxiling
        6
    junjieyuanxiling  
       2019-04-09 15:30:18 +08:00 via Android   ❤️ 1
    C++更难吧
    rockdean
        7
    rockdean  
       2019-04-09 15:39:46 +08:00
    单纯的开发 rust 和 go 吧
    q397064399
        8
    q397064399  
       2019-04-09 15:41:57 +08:00   ❤️ 3
    @whi147 #4 写挂的表示,没有这些骚操作,我就只能内嵌汇编了
    zhengxiaowai
        9
    zhengxiaowai  
       2019-04-09 15:44:26 +08:00   ❤️ 5
    你应该选择一门脚本语言作为备用该语言,没见过 java 和 go 和 c++ 三个非用不可的地方
    SeaRecluse
        10
    SeaRecluse  
       2019-04-09 15:47:49 +08:00
    还有一门 C++......
    nmap
        11
    nmap  
       2019-04-09 16:08:05 +08:00
    还有一门 C++,据说是和 Java 对标的
    baicheng10
        12
    baicheng10  
       2019-04-09 16:11:07 +08:00   ❤️ 1
    C 艹:我不要面子的啦
    nanaw
        13
    nanaw  
       2019-04-09 16:15:50 +08:00 via Android   ❤️ 1
    这边建议用 Assembly Language 当备用语言哦
    hhyvs111
        14
    hhyvs111  
       2019-04-09 16:23:30 +08:00
    c++都拿来当备胎了,楼主你飘了
    zjyl1994
        15
    zjyl1994  
       2019-04-09 16:24:19 +08:00   ❤️ 3
    hmmm,去学 go 吧,好歹带 GC 的。
    C++难度很大,我认识好几个立志写 c++的写了几年就跑出来做别的了,太累。
    而且 C++需要手动管理内存,一个处理不好就是内存泄露浑身漏洞。没事别找事。
    mattx
        16
    mattx  
       2019-04-09 16:25:34 +08:00 via iPhone
    c++ 属于修炼内功
    sryanyuan
        17
    sryanyuan  
       2019-04-09 16:29:00 +08:00
    看你干什么的了 go 和 c++的学习成本完全不是一个等级的 假设你有操作底层的需求 或者写各种计算密集型应用 那 c++还是很强大的
    Kiota
        18
    Kiota  
       2019-04-09 16:29:44 +08:00
    还有一门 C++,据说是和 Java 对标的,没毛病 2333
    GeruzoniAnsasu
        19
    GeruzoniAnsasu  
       2019-04-09 16:34:54 +08:00   ❤️ 7
    这是我有生以来见到的第一个
    “以黑 PHP 的方式”黑 C 艹的帖子
    zjsxwc
        20
    zjsxwc  
       2019-04-09 16:35:23 +08:00
    对 Go 这门语言,印象最深的是可以编译出 N 个 exe 执行文件,貌似性能也算不错。

    蛤?
    misaka19000
        21
    misaka19000  
       2019-04-09 16:40:12 +08:00
    楼主黑 Java 慢显然没黑到点子上,而且发 ICMP 这种包显然需要操作系统的支持
    HackerPainter
        22
    HackerPainter  
       2019-04-09 16:40:15 +08:00
    当 C++莫名其妙的 coredump 了,你就会发现 C++真操蛋;
    当 C++莫名其妙的内存泄漏了,你就会发现 C++真蛋疼;
    halk
        23
    halk  
       2019-04-09 16:40:19 +08:00
    推荐下一个是脚本语言,例如 Python
    更实用,写个小工具,日志处理什么的很方便
    PureWhiteWu
        24
    PureWhiteWu  
       2019-04-09 16:41:29 +08:00
    还有一门 C++,据说是和 Java 对标的
    bp0
        25
    bp0  
       2019-04-09 17:12:25 +08:00
    我怎么感觉你们说的是 C,不是 C++。C++11 以后的智能指针基本能解决内存泄漏的问题。问题是大家都不怎么用 2333。

    另外,不知道谁对标谁。不过,C++是 1985 年的,Java 是 1995 年。
    iszero
        26
    iszero  
       2019-04-09 17:17:29 +08:00 via Android
    为什么不是 C 啊,多简单,越来越不认识庞大复杂的 c++了
    q397064399
        27
    q397064399  
       2019-04-09 17:18:46 +08:00
    C++ 自己手动管理内存,顺带了解下引用计数 有向图分析 等各类 GC 算法,有兴趣的自己搞一套协程 + 消息同步机制
    就差不多是半个 Golang 了, 这还是自带模板的。

    学语言就两门 C/C++ 这种直接操作内存(各种骚操作 内联汇编啥的) 跟 其它各类有高层抽象封装的语言。
    marsgt
        28
    marsgt  
       2019-04-09 17:19:20 +08:00
    为啥要编译出这么多的 EXE 文件捏?
    HuasLeung
        29
    HuasLeung  
       2019-04-09 17:19:34 +08:00
    C++从入门到放弃……那一大堆标准库就要耗费大量的时间
    mscb
        30
    mscb  
       2019-04-09 17:19:47 +08:00 via Android
    字里行间,你不说写 Java 的我还以为你是写 PHP 的🤔
    waising
        31
    waising  
       2019-04-09 17:19:49 +08:00
    我也是主 java 的 最近在看 golang
    HuasLeung
        32
    HuasLeung  
       2019-04-09 17:20:24 +08:00
    @junjieyuanxiling 没见过敢说自己精通 C++的,比 java 难多了
    lilpig
        33
    lilpig  
       2019-04-09 17:22:03 +08:00 via Android
    用 C++当备用语言??😂
    maxmin
        34
    maxmin  
       2019-04-09 17:30:38 +08:00
    人家需求这么明显,想设计一些底层的网络
    那考虑啥。只有用 c/c++你才能看到里面的花花世界。

    还有那些说 c++莫名其妙的 crash,就觉得 c++操蛋? 这 tm 也能怪到语言上面来?
    自己懒,还都不谈 gc 的消耗。
    mamahaha
        35
    mamahaha  
       2019-04-09 17:34:53 +08:00
    不要学狗熊掰棒子,到头来全都没掌握。
    webjin1
        36
    webjin1  
       2019-04-09 17:36:43 +08:00
    没人说易语言吗?
    missdeer
        37
    missdeer  
       2019-04-09 17:37:56 +08:00   ❤️ 2
    别听上面的人瞎说,C++是有点难有不少问题,但是你照 C++17,最次也是 C++14 的标准去用,几乎不会遇到上面的人说的这些情况,上面的人说的都是 C++98/03 那些 15~20 年前的标准才会有的事了
    pursuer
        38
    pursuer  
       2019-04-09 17:41:03 +08:00
    用 java 迟早要学写 jni 的。所以还用选吗?当然 C/C++啦
    ivechan
        39
    ivechan  
       2019-04-09 17:42:44 +08:00
    C++ 不适合备用吧,这玩意不经常写,肯定蒙蔽。。
    ebony0319
        40
    ebony0319  
       2019-04-09 17:44:35 +08:00
    这是 c++在 v 站 黑得最惨的一次.
    cxh116
        41
    cxh116  
       2019-04-09 17:50:49 +08:00   ❤️ 1
    C/C++ .太多的基础库是用它们来写的. 比如数据库驱动,Java Python PHP 语言的实现.

    不要求熟练,至少要能看懂.
    knowckx
        42
    knowckx  
       2019-04-09 17:53:32 +08:00
    go 和 java 在后端开发这块重合很多,没必要学了 java 再去搞 go
    lqw3030
        43
    lqw3030  
       2019-04-09 17:57:25 +08:00 via iPhone
    为什么会有备用语言的想法,不是应该深入吗。。
    across
        44
    across  
       2019-04-09 17:58:43 +08:00
    看底层只有 C 和 C++(啥,什么汇编?)

    根据你的要求,Go 和 C++没法对标啊····
    lostberryzz
        45
    lostberryzz  
       2019-04-09 18:04:42 +08:00 via iPhone
    推荐 Rust
    Yoock
        46
    Yoock  
       2019-04-09 18:51:21 +08:00 via iPhone
    Puthon 吧
    Yoock
        47
    Yoock  
       2019-04-09 18:51:40 +08:00 via iPhone
    Python 吧,打错了
    12101111
        48
    12101111  
       2019-04-09 19:12:37 +08:00 via Android
    rust 吧,学会了有效的提升对编程语言的理解
    CTO
        49
    CTO  
       2019-04-09 19:29:18 +08:00
    真要搞高性能的时候,恕我直言,带 gc 的一个能打的都没有
    eret9616
        50
    eret9616  
       2019-04-09 20:39:06 +08:00
    学 C++把 我也在学,已经学半年了 目前工作是前端,我们一起学
    iceheart
        51
    iceheart  
       2019-04-09 20:53:39 +08:00 via Android
    如果你以学习为乐趣,那 C++是好朋友,你的乐趣会一直在
    ae86
        52
    ae86  
       2019-04-09 21:02:53 +08:00
    有空的话,c++值得一学,但是人家可不是用来当作备用的语言的呢
    sunny352787
        53
    sunny352787  
       2019-04-09 22:01:33 +08:00
    这萌新也太新了吧🤦‍♂️
    chinafu
        54
    chinafu  
       2019-04-09 22:10:26 +08:00
    c++值得一学...........
    murmur
        55
    murmur  
       2019-04-09 22:14:23 +08:00
    当然是 c++ 以后越来越多的胶水语言涉及到底层还得是 c
    byteli
        56
    byteli  
       2019-04-09 22:24:40 +08:00 via Android
    别 cpp,花几年可能都理不清楚,生命有限,感觉我这辈子已经花了不少时间处理内存泄漏和空指针了,还有堆栈被破坏的情况,那点时间留给 gc 调优以及申请机器多好,调优 gc 起码还能写文章分享经验
    q397064399
        57
    q397064399  
       2019-04-09 22:30:22 +08:00
    @byteli #56 人家是想了解底层拿 CPP 当研究底层技术的手段,你那是拿 CPP 当饭吃 能一样吗
    出于技术研究跟爱好 C/C++ 基本上是避不开的
    q397064399
        58
    q397064399  
       2019-04-09 22:32:30 +08:00
    @byteli #56 而且真的写底层的,不用智能指针,早些年泄露那都是家常便饭,但是一个小的 http 服务器 或者研究性质的代码 泄漏就泄露了反正又跑不了几分钟,现在好多写编译器演示的,直接略过了内存回收,泄漏就泄露了 反正又跑不了几分钟
    yujincheng08
        59
    yujincheng08  
       2019-04-09 23:14:55 +08:00 via Android
    c++什么时候这么惨了😂
    VEEX6
        60
    VEEX6  
       2019-04-09 23:38:34 +08:00 via Android
    @whi147 go 是为了实现垃圾收集才取消指针操作的,手动傻瓜化,鱼熊掌不兼得,操作空间大不可预测是 c 的优点而不是缺点。
    Vegetable
        61
    Vegetable  
       2019-04-09 23:46:40 +08:00
    备用首选 python,其次我觉得 lua 都比 c++强,这两个各有特色.
    真的,要不看看 shell?你要的是备用语言,不是为了受虐,也不是为了补全自己的知识,起码这玩意得用得上是吧
    wth123456
        62
    wth123456  
       2019-04-10 00:03:05 +08:00
    网页开发 js,数据开发 python。。。
    janus77
        63
    janus77  
       2019-04-10 00:07:31 +08:00 via iPhone
    rust 和 go,你喜欢哪个就随便用吧
    c++肯定写的不快,图方便不用考虑他了
    Arnie97
        64
    Arnie97  
       2019-04-10 00:10:07 +08:00 via Android
    小孩子才做选择,大人全都要
    反正你不是作为第一语言来深入细节,不如都看看
    beordle
        65
    beordle  
       2019-04-10 02:18:11 +08:00 via Android
    你来说,最好的是学习 jvm 本身和 jvm 的扩展 jni,没有之一。所以选最正统的语言,c++
    beordle
        66
    beordle  
       2019-04-10 02:27:22 +08:00 via Android
    简而言之 java 的技术栈最成熟,足够你干一辈子,所以怎么专注才是你要考虑的主要内容,你去大公司譬如阿里,肯定会面试到 jvm 或者其实现,这个时候会深挖 java 相关技术,你就知道为啥要学这个个东西了。jni 也可以满足你提高 java 性能的要求,所以选择 c++ 没有错的,大多数情况不用去 write,但要足够熟练的 read。毕竟 read 的时候可以忽略内存管理相关的细节。


    golang 这个语言本质上就是另一个 java,没有和 java 一起学的意义,当然作为一个从业者还是要理解其核心思想概念 但没必要去大量尝试。
    brainfxxk
        67
    brainfxxk  
       2019-04-10 02:49:32 +08:00
    后悔十年前没学 c++ 不然现在可能就会 c++了...
    halo117
        68
    halo117  
       2019-04-10 03:46:43 +08:00 via iPhone
    cpp 现在普遍应用场景和 java 不太一样,你当然会觉得 curd 的库不多,兴趣了解而不深入语言是两门选谁都无所谓, 还想吐槽下先确定是不是没有再来说,java 实现 icmp 发包困难,真的有用搜索引擎搜过那么难实现吗?算了无知者无畏
    Cbdy
        69
    Cbdy  
       2019-04-10 04:29:38 +08:00 via Android
    Golang 就是重新发明 Java
    waruqi
        70
    waruqi  
       2019-04-10 04:48:56 +08:00 via Android
    c/lua
    banbishan
        71
    banbishan  
       2019-04-10 08:15:01 +08:00 via Android
    现在不是都 c++11 了吗,都智能指针了吗,auto_ptr、unique_ptr、shared_ptr、weak_ptr。还有 boost::scoped_ptr、boost::scoped_array、boost::intrusive_ptr。咋个还有严重的内存泄露问题。。。。
    ThomasZ
        72
    ThomasZ  
       2019-04-10 08:19:12 +08:00 via Android
    @AngryPanda 看到这句话的时候我基本已经不想再看这贴了
    qilishasha
        73
    qilishasha  
       2019-04-10 08:39:56 +08:00
    觉得 C++是一个大的分类,该死的 GCC,编译起来脑壳痛的感觉记忆犹新……
    zonga
        74
    zonga  
       2019-04-10 08:50:45 +08:00 via iPhone
    萌新新的让我想起了当年打刀塔遇到的新手队友,游戏打字问队友假腿怎么出
    345161974
        75
    345161974  
       2019-04-10 09:01:10 +08:00
    如果是为了快速原型,建议你 Go,Python,算瑞士军刀。
    king1101
        76
    king1101  
       2019-04-10 09:04:14 +08:00
    和 java 对标的那个,叫 C#吧
    wweir
        77
    wweir  
       2019-04-10 09:26:38 +08:00 via Android
    强烈建议上 Python 之类脚本语言。
    C++ 难度在那,不用说。
    golang 的话,至今没见到自我评价为 JAVA 程序猿的人,能把 golang 写好。两个语言描述世界的方式就不一样,一个继承、一个组合,文化冲突强烈。
    aaa5838769
        78
    aaa5838769  
       2019-04-10 09:56:45 +08:00
    膜拜大佬,备用语言敢学 c++ 应该不是科班出身的吧。
    zarte
        79
    zarte  
       2019-04-10 09:57:23 +08:00
    全都要,小孩子才做选择
    daodao116
        80
    daodao116  
       2019-04-10 09:57:40 +08:00
    还有一门 C++,据说是和 Java 对标的???
    weiweicat123
        81
    weiweicat123  
       2019-04-10 10:43:41 +08:00
    还有一门 C++,据说是和 Java 对标的
    wolfie
        82
    wolfie  
       2019-04-10 11:06:18 +08:00
    写过 Java 好歹也听过 C++吧。。。
    vanxy
        83
    vanxy  
       2019-04-10 11:12:50 +08:00
    备用语言这个概念太奇怪了, 只有根据需求选语言的。

    比如楼主这 ICMP 的需求,Google 一下,http://www.icmp4j.org/d/index.html 就能找到 Java 的库。

    > 有时候觉得 Java 处理效率太慢了
    看下来楼主貌似只用了 Java 一门语言,如何得出效率慢的结论的?
    wind3110991
        84
    wind3110991  
       2019-04-10 11:21:33 +08:00
    “然而我有时候觉得 Java 处理效率太慢了”
    —— 你让成天和 OLAP、Hbase 等等大数据处理相关打交道的人情何以堪 = =。Java 是框架和各种 SDK 封装的会比较重,但是原生的 JDK 绝对不存在所谓的“处理效率太慢”的问题。
    更何况你要知道,横向扩容的成本,远远比纵向提升语言性能和开发效率的成本要低,所以不管你学什么语言作为备用,你对主语言 Java 的理解是远远不够的
    raptor
        85
    raptor  
       2019-04-10 11:35:44 +08:00
    够浪吧,C++是大坑
    ZiLong
        86
    ZiLong  
       2019-04-10 11:41:20 +08:00
    太萌了
    slince
        87
    slince  
       2019-04-10 11:46:44 +08:00
    @knowckx go/c/c++是系统级别语言,可以开发服务端应用也可以开发服务端应用,开发的应用可以只发行一个 exe 文件,你用 java 写还要你的用户先去下载一个 jre 吗; java 只是服务端语言,谁给你的自信 java 可以和他们重合
    slince
        88
    slince  
       2019-04-10 11:47:04 +08:00
    @slince 客户端
    wafm
        89
    wafm  
       2019-04-10 12:21:22 +08:00
    @q397064399 握手,同行
    gz911122
        90
    gz911122  
       2019-04-10 12:27:36 +08:00
    @slince java 也是客户端语言
    android 了解一下
    lithiumii
        91
    lithiumii  
       2019-04-10 12:31:09 +08:00
    C++不是跟 Java 对标的吧,C++++才是(滑稽[后俩+要换行{#
    impl
        92
    impl  
       2019-04-10 13:25:58 +08:00 via Android
    80 岁以后可以学点 cxx,go 可以不用学,用就行。
    kwanCCC
        93
    kwanCCC  
       2019-04-10 14:54:29 +08:00
    1.choose Cplusplus
    2.Keep moving
    3.End of life
    C++三部曲,一直在逼近 3
    Katrol
        94
    Katrol  
       2019-04-10 16:31:19 +08:00
    Golang 吧,C++学好不容易
    msaionyc
        95
    msaionyc  
       2019-04-10 16:38:40 +08:00
    楼主你真的是萌新啊,c++是和 java 对标的,谁跟你说的啊
    mritd
        96
    mritd  
       2019-04-10 19:30:10 +08:00 via iPhone
    如果你是 java,从发展方向上看,你未来巴不成得碰 docker 容器啥的,那么你应该选择 go
    fancyhan
        97
    fancyhan  
       2019-04-11 10:47:29 +08:00
    C++备用不了,要学就学几年,备用请用 golang
    knowckx
        98
    knowckx  
       2019-04-28 11:22:15 +08:00
    @slince 系统级语言的前提是内存的精细控制,带 GC 的 GO 离 c/c++有点远。
    GO 能做的,JAVA 也能做,两者可以互相代替
    CSEnter
        99
    CSEnter  
       2019-08-17 13:25:49 +08:00
    @SuperMild rust 挺难的,比 c++性能高一丢丢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1920 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.