Go 是否可以替代 C 和 C++? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
pertersonvv
V2EX    Go 编程语言

Go 是否可以替代 C 和 C++?

  •  
  •   pertersonvv span title="2014-12-28 20:13:07 +08:00">2014-12-28 20:13:07 +08:00 4746 次点击
    这是一个创建于 3941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    亲们为何学Go呢?学它是为了干啥的?
    88 条回复    2015-01-03 13:21:48 +08:00
    nicai000
        1
    nicai000  
       2014-12-28 20:16:24 +08:00
    不可以
    WDsUO7HnS2Na1DFC
        2
    WDsUO7HnS2Na1DFC  
       2014-12-28 20:16:54 +08:00   1

    大部分情况下可以替代
    当工具,没情怀,不纠结
    反正就一菜鸟,还没到讨论语言优劣的程度
    yksoft1
        3
    yksoft1  
       2014-12-28 20:30:34 +08:00
    C可以在DOS和没有OS的嵌入式环境下写程序,Go至少没有实现
    ForgotFun
        4
    ForgotFun  
       2014-12-28 20:38:01 +08:00
    可以替代,但是不能完全替代.
    maemual
        5
    maemual  
       2014-12-28 20:39:08 +08:00
    为什么要替代?
    mengzhuo
        6
    mengzhuo  
       2014-12-28 20:45:30 +08:00   1
    Go的出现拯救了很多追求性能,又想保留部分动态语言特性的菜鸟Python服务端程序猿……比如我……
    ll0xff
        7
    ll0xff  
       2014-12-28 20:47:20 +08:00

    很多应用场景下不可以替代,涉及底层太多的部分,也就C 了(汇编。。?!)
    C++我没怎么用过,但是很明显也不可替代
    Go有很多优秀特性没必要和别人抢一片天空

    我也是菜鸟,没到讨论语言优劣的程度
    pertersonvv
        8
    pertersonvv  
    OP
       2014-12-28 20:47:41 +08:00
    @ForgotFun 你也在用go?
    pubby
        9
    pubby  
       2014-12-28 20:48:32 +08:00 via Android
    今天碰到centos5.9内核版本太低装不上go
    9hills
        10
    9hills  
       2014-12-28 20:52:29 +08:00
    能在某些领域替代,这就够了
    railgun
        11
    railgun  
       2014-12-28 20:55:41 +08:00
    有大脑了难道就不需要脊椎了?
    ForgotFun
        12
    ForgotFun  
       2014-12-28 20:56:56 +08:00
    @pertersonvv 平时一些小工具会用go写.
    fwee
        13
    fwee  
       2014-12-28 20:59:38 +08:00
    在C/C++和java互相交叉的那一小块可以替代,所以没学它啊
    icedx
        14
    icedx  
       2014-12-28 21:04:32 +08:00
    不可以
    ChiangDi
        15
    ChiangDi  
       2014-12-28 21:07:36 +08:00   2
    其实这也是个委婉的圣战帖,比楼主上次发的那个“PHP 和 Ruby 哪个更有前途“高明多了,楼主是个赚铜币小能手。
    initialdp
        16
    initialdp  
       2014-12-28 21:08:52 +08:00
    我觉得替代C++没问题,替代C的话几乎不可能。go做服务端编程据说天生好手,有新项目的话打算试试。
    pertersonvv
        17
    pertersonvv  
    OP
       2014-12-28 21:11:54 +08:00
    @ForgotFun 为啥不用python?
    ForgotFun
        18
    ForgotFun  
       2014-12-28 21:13:53 +08:00
    @pertersonvv 主要C用时间长了,对python这一类的语法有点抵触,学了好多次但是心理上接受不了,后来正好看到了go就学着用了.当然我go的水平也就比hello world强一点.
    icylogic
        19
    icylogic  
       2014-12-28 21:23:05 +08:00
    - C != C++
    - 没有能力整体评价语言, 不过目前就我看到的, Rust 可能更被看好, 至少在取代 C++ 这件事上. 按我的试用感受, Rust 从各种范式吸收了很多, 语法特性丰富, 这点和 C++ 像, 不过比 C++ 好的地方是没有 C 的包袱, 所以内存管理要更安全和严格, 不会出现返回野指针这种事. 然后它试图通过编译期严格地检查来避免 Bug, 这点能不能实现有待观察, 但至少是值得期待的尝试. 不过我不太喜欢 .unwrap()
    pertersonvv
        20
    pertersonvv  
    OP
       2014-12-28 21:37:47 +08:00
    @ForgotFun 就会说你没准备好好学Go?会的Go差不多只能搞hello world么:(
    mahone3297
        21
    mahone3297  
       2014-12-28 21:38:50 +08:00
    @ChiangDi 哈哈哈,仔细去看了下,还真是lz发的,莫非真事来赚铜币的?哈哈
    ForgotFun
        22
    ForgotFun  
       2014-12-28 21:42:10 +08:00
    @pertrsonvv 也不是的,我现在很少在一线写代码了.现在基本都是在公司管管营销这块(是我自己提出来的,领导批准了). 所以很难写出来那种规范和功能都是特别好的go代码.也就属于练手级别. 现在我自己的感受是年纪大了的确学不了东西了,脑子里装不下其他东西.

    现在有点理解张三丰叫教张无忌太极时候说的,你得忘记全部的武功. 想接受新事物,必须用原来的思维考虑东西.
    chenhui7373
        23
    chenhui7373  
       2014-12-28 21:43:17 +08:00
    Neveroldmilk
        24
    Neveroldmilk  
       2014-12-28 21:45:14 +08:00
    LZ无节操挑事。
    pertersonvv
        25
    pertersonvv  
    OP
       2014-12-28 21:45:37 +08:00
    @ForgotFun 你不搞技术了么?管营销平时很闲的吧?
    ForgotFun
        26
    ForgotFun  
       2014-12-28 21:49:39 +08:00
    @pertersonvv 人就像一根蜡烛,年轻的时候我比较卖力,两头都在烧,导致现在基本都是才华用尽了. 导致现在做啥事情都没当年的激情了. 有时候感觉是自己老了.

    营销我是比较喜欢的,程序员平时不和人接触,我想把我原来缺失的东西补回来.那就是交流和沟通.
    pertersonvv
        27
    pertersonvv  
    OP
       2014-12-28 21:51:07 +08:00
    @chenhui7373 python, ruby怎么成有害技术了,貌似很多人赞的啊...
    pertersonvv
        28
    pertersonvv  
    OP
       2014-12-28 21:52:09 +08:00
    @ForgotFun 从技术转营销,完全不写代码了么?
    ForgotFun
        29
    ForgotFun  
       2014-12-28 21:59:46 +08:00
    @pertersonvv 也在写,但不是那种为了工作而写的那种代码.缺少功利性和强迫了,反而写的比较少了.

    可能现在我的状态很多程序员都会遇到吧,事业的低谷期吧,感觉被人抛弃那种感觉.
    njutree
        30
    njutree  
       2014-12-28 22:00:59 +08:00
    go语言今年的口号是rewrite it all。至于为什么这么说你可以看下这个https://www.v2ex.com/t/155955#reply1
    pertersonvv
        31
    pertersonvv  
    OP
       2014-12-28 22:07:32 +08:00
    @ForgotFun 是你自己不想写代码额,亲,搞技术工资应该比营销高吧:)
    pertersonvv
        32
    pertersonvv  
    OP
       2014-12-28 22:09:41 +08:00
    @njutree go的开发效率高么?
    ForgotFun
        33
    ForgotFun  
       2014-12-28 22:10:08 +08:00
    @pertersonvv 到手9.6K吧,也不算高.主要想给自己留点退路吧,毕竟程序员这行不是长青的. 28-30这段时间其实应该考虑下转型的,不然真晚了.
    pertersonvv
        34
    pertersonvv  
    OP
       2014-12-28 22:12:09 +08:00
    @ForgotFun 你搞技术几年了?
    damngood
        35
    damngood  
       2014-12-28 22:14:10 +08:00
    就 golang 需要 runtime 这点就说明不能完全替代 runtime-less 的 c & c++
    rust 可能性更大点.
    lznigxyy
        36
    lznigxyy  
       2014-12-28 22:14:15 +08:00
    国内用go的还比较少吧
    mimzy
        37
    mimzy  
       2014-12-28 22:14:59 +08:00   2
    楼主6天内发了大约32个帖子,看上去十分求知若渴,不过还是建议除非真的遇到了实际性问题,少发一些争议帖,个人认为这样多少让论坛有点水。
    ForgotFun
        38
    ForgotFun  
       2014-12-28 22:15:13 +08:00
    @pertersonvv 我在大学就开始写代码了,现在算来有6-7年了. 现在国内很多路由器代码基本都是我大学和工作期间转让的.包括现在电信用的比较多的Javascript注入技术.
    233
        39
    233  
       2014-12-28 22:26:14 +08:00
    lz是不是常混贴吧,水经验成性了吧
    daiv
        40
    daiv  
       2014-12-28 22:42:03 +08:00
    怎么不说是 python 呢
    Bluecoda
        41
    Bluecoda  
       2014-12-28 22:49:56 +08:00
    go根本无法替代c,首先go编译出来的东西根本无法让其他语言简单的调用。这一点上,rust秒go几条大街。
    pertersonvv
        42
    pertersonvv  
    OP
       2014-12-28 23:05:05 +08:00
    @ForgotFun 那亲是不是发大财了呢,哈哈
    pertersonvv
        43
    pertersonvv  
    OP
       2014-12-28 23:06:22 +08:00
    @Bluecoda rust不火吧?都有哪些大程序用rust开发的?
    Bluecoda
        44
    Bluecoda  
       2014-12-28 23:13:04 +08:00
    @pertersonvv 现在确实不咋火,还没release呢
    njutree
        45
    njutree  
       2014-12-28 23:19:32 +08:00
    @pertersonvv go的开发效率非常的高,至于为什么我上面的回复里面的那个帖子里面有解释。
    pertersonvv
        46
    pertersonvv  
    OP
       2014-12-28 23:22:49 +08:00
    @Bluecoda 那你关注它干啥?
    pertersonvv
        47
    pertersonvv  
    OP
       2014-12-28 23:23:43 +08:00
    @njutree go开发效率应该不及动态语言
    njutree
        48
    njutree  
       2014-12-28 23:27:27 +08:00
    @pertersonvv 开发效率的高低和是不是动态语言有什么关系?
    G2bN4dbX9J3ncp0r
        49
    G2bN4dbX9J3ncp0r  
       2014-12-28 23:29:26 +08:00
    @njutree 有关啊,和语言有很大关系啊
    wuxqing
        50
    wuxqing  
       2014-12-28 23:33:09 +08:00
    chenhui7373 的链接,估计很多人不会认同,哈
    njutree
        51
    njutree  
       2014-12-28 23:33:25 +08:00
    @lidashuang 我只知道go语言非常的简洁高效,心智负担非常的低,非常方便的测试用例,良好简单的自动文档。
    barbery
        52
    barbery  
       2014-12-28 23:41:12 +08:00
    虽然我很喜欢go,但是事实是Go不能完全代替C,官方的pkg包就有不少一部分是C写的。。
    pertersonvv
        53
    pertersonvv  
    OP
       2014-12-28 23:46:14 +08:00
    @njutree 可以不学C,直接上Go么?
    ertp2732
        54
    ertp2732  
       2014-12-28 23:51:15 +08:00
    语言只是工具,核心是思想,合适就用,不合适就换,没有最好或代替之说,不要纠结这些。
    polythene
        55
    polythene  
       2014-12-28 23:52:36 +08:00
    那末请问楼上各位大大,用go写出来的代码可移植性好么,就是它可以在各种*nix平台编译并且运行么,它需要有各种运行时环境么?
    G2bN4dbX9J3ncp0r
        56
    G2bN4dbX9J3ncp0r  
       2014-12-29 00:07:51 +08:00
    @njutree 是这样的,不过和动态语言比开发效率还是不行
    sing1ee
        57
    sing1ee  
       2014-12-29 00:14:55 +08:00
    go的内存管理,问题还是有的。Rust应该不错。
    soone
        58
    soone  
       2014-12-29 00:19:44 +08:00
    @Bluecoda go1.4版本可以编译出.so的文件了哦
    reusFork
        59
    reusFork  
       2014-12-29 00:33:51 +08:00
    runtime部分已经是纯go了,1.5的编译器也将是纯go的。其他领域不好说,google go编译器里的C是要被替代了的。
    可移植性也不错,windows、linux、darwin、*BSD、solaris、Nacl、plan9等等。
    pertersonvv
        60
    pertersonvv  
    OP
       2014-12-29 06:35:53 +08:00
    @reusFork go与C可以混合编程么?
    Bluek404
        61
    Bluek404  
       2014-12-29 06:48:26 +08:00 via Android
    @pertersonvv 有cgo
    而且用go写的系统也有了
    虽然是修改版的go
    不过用go的主要原因是简单省事
    pertersonvv
        62
    pertersonvv  
    OP
       2014-12-29 06:51:01 +08:00
    @Bluek404 搞go用啥ide比较好?
    Bluek404
        63
    Bluek404  
       2014-12-29 06:52:18 +08:00 via Android
    @pertersonvv 萝卜白菜各有所爱
    就不引起圣战了
    都用一遍就知道了
    pertersonvv
        64
    pertersonvv  
    OP
       2014-12-29 06:58:07 +08:00
    @Bluek404 不是圣战额,比下优劣也没有错额:)
    qdwang
        65
    qdwang  
       2014-12-29 07:52:22 +08:00 via Android
    目前rust呼声比go高一些
    pertersonvv
        66
    pertersonvv  
    OP
       2014-12-29 08:06:24 +08:00
    @qdwang 好像这里就你在呼
    jyoe
        67
    jyoe  
       2014-12-29 08:35:46 +08:00
    又见战帖
    pertersonvv
        68
    pertersonvv  
    OP
       2014-12-29 08:37:57 +08:00
    @jyoe 比较贴好伐?
    njutree
        69
    njutree  
       2014-12-29 09:46:10 +08:00
    @pertersonvv 可以啊,不用学c可以直接上go
    njutree
        70
    njutree  
       2014-12-29 09:47:48 +08:00
    @lidashuang 举几个动态语言来看看。
    9
        71
    9  
       2014-12-29 10:13:27 +08:00
    那你觉得 docker 为什么是用 go 来写的呢?
    Bluecoda
        72
    Bluecoda  
       2014-12-29 10:13:35 +08:00   1
    @pertersonvv 因为我对比两个语言后,我觉得我还是更喜欢rust多一些,而且rust的特性更吸引人
    Bluecoda
        73
    Bluecoda  
       2014-12-29 10:16:09 +08:00
    @soone 哦?1.4可以了吗?但是是M:N模型的并发,不可以让别的语言简单的使用FFI进行调用吧?我记得go 1.4的so是给android用的。rust的so和c的so没有什么区别,可以简单的给erlang/ruby等等第三方语言直接调用。
    pertersonvv
        74
    pertersonvv  
    OP
       2014-12-29 10:22:16 +08:00   1
    @Bluecoda go 1.4的so是给android用的,不能给其他语言用么?
    ThomasZ
        75
    ThomasZ  
       2014-12-29 10:33:26 +08:00
    可以代替, 但是替代是不行
    Bluecoda
        76
    Bluecoda  
       2014-12-29 11:22:15 +08:00
    @pertersonvv 我记得是这样的,因为go那一套东西本来就很难做到和c一样的兼容性,所以要做到和c一样的扩展能力,非常难,你看,他还有gc呢。不过我也有可能错了,欢迎打脸。
    G2bN4dbX9J3ncp0r
        77
    G2bN4dbX9J3ncp0r  
       2014-12-29 11:39:24 +08:00
    @njutree 比如go,ruby , beego, rails
    njutree
        78
    njutree  
       2014-12-29 11:56:13 +08:00
    @lidashuang go不是动态语言,beego只是一个开发框架。动态语言是有一定的优越性,但并不能在开发效率上有质的提升。就go目前提高效率的方面来看,我认为是我用过语言中最高效的(c,c++,php,java,Javascript,wiring, oc, go).go 使用的是同步编程的模型,相对异步来讲大大降低了程序猿的心智负担,其次非常的简洁干净的包管理结构清晰,自动文档化方便协作,良好的单元测试降低测试时间提高代码质量,非常方便的第三份库管理。
    xjliao
        79
    xjliao  
       2014-12-29 11:57:02 +08:00
    你说的话 暴露了你自己的经验 代替这样的话 不要随便乱说的 存在的即合理的 即有他的长处
    pertersonvv
        80
    pertersonvv  
    OP
       2014-12-29 12:29:22 +08:00
    @njutree 你是做啥开发的?听说做web开发,用Ruby开发效率最高的
    benjiam
        81
    benjiam  
       2014-12-29 13:10:20 +08:00 via Android
    在服务器方面 会的
    webobo365
        82
    webobo365  
       2014-12-29 14:25:04 +08:00
    用什么语言取决于需求,在可预见的时间范围内,Go语言不可能取代C/C++, 但是Go语言有自己的用武之地。 不要陷入语言孰优孰劣的争论。
    Vedar
        83
    Vedar  
       2014-12-29 16:07:00 +08:00
    @Bluecoda 握手 我也很看好rust 对go无感
    pertersonvv
        84
    pertersonvv  
    OP
       2014-12-29 16:08:20 +08:00
    @Vedar go要死的节奏么?
    JQ
        85
    JQ  
       2014-12-29 18:54:22 +08:00
    不知道其他人如何,我写go程序目前比较吃力的。不像Python那样可以直接用边写边调试。
    pathletboy
        86
    pathletboy  
       2014-12-29 19:16:49 +08:00   1
    @JQ 那说明你开发方法不对,模块化+单元测试,实现你所谓的边写边调试,搜索看看go如何进行单元测试吧,会让你有启发的。
    ming2281
        87
    ming2281  
       2014-12-29 23:51:24 +08:00
    会慢慢侵蚀它们的领域,但是有一些核心领域,C/C++没有替代者.

    这件事情Java做了这么多年了,还是没有kill掉他俩, 可见路还是得慢慢走.
    mathgl
        88
    mathgl  
       2015-01-03 13:21:48 +08:00
    汇编都没有被替代,我同事还在用汇编。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3447 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 04:49 PVG 12:49 LAX 21:49 JFK 00:49
    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