V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
artchencheng
V2EX  ›  Go 编程语言

大家如何评价Go语言?

  •  
  •   artchencheng · 2013-05-16 10:30:18 +08:00 · 8712 次点击
    这是一个创建于 4200 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想学学Go,不知道大家怎么看这语言的?
    72 条回复    2014-11-19 17:34:45 +08:00
    xdeng
        1
    xdeng  
       2013-05-16 10:35:11 +08:00
    有前途
    typing
        2
    typing  
       2013-05-16 10:46:21 +08:00
    仅仅从我个人的经验来看,
    如果需要常数复杂度上的提升, C/C++
    否则就是Python/Javascript这类.

    我现在还不了解Go的受众,
    看看大伙在实际中怎么用Go的
    Idiosyncratic
        3
    Idiosyncratic  
       2013-05-16 10:55:49 +08:00
    不清楚。。。。。,看过点简介,没有体会到比目前有的语言更明显的优势。
    qiukun
        4
    qiukun  
       2013-05-16 11:02:08 +08:00
    better c
    limu
        5
    limu  
       2013-05-16 11:07:58 +08:00   ❤️ 3
    ken 和 rob 两个是和 bjarne 一样的土鳖.
    1. 没有 type class , go 注定要重新发明这玩意.
    2. 不基于Erlang 和 Haskell 类似的 immutable 数据结构. 还号称"面向并发", 只能是掉进和 Java 一样坑里. (多CPU GC我看你们怎么搞, 无解: 长时间的stop the world 是土鳖的必然结果). 加上 goroutine 的非抢占式调度, 在实时性要求稍微高一点的应用场合只能是个废物.
    3. 有前途. 参照C++. 即使go的出发点是一门简单的语言, 不可避免的要成为比C++甚至Java更复杂的庞然大物
    jiumingmao
        6
    jiumingmao  
       2013-05-16 11:23:18 +08:00   ❤️ 1
    不用想别人怎么看,自己看一下觉得有兴趣就学
    RisingV
        7
    RisingV  
       2013-05-16 11:32:54 +08:00   ❤️ 1
    早就预料到用FP的人要喷了。世界还是结构化语言的世界。
    不多说,就三个字:用着爽!
    venglide
        8
    venglide  
       2013-05-16 12:13:54 +08:00
    王垠的分析:Go language is a horrible crap: http://www.mindomo.com/view?m=8cc4f95228f942f8886106d876d1b041
    你们怎么看?
    hooluupog
        9
    hooluupog  
       2013-05-16 12:43:42 +08:00
    比较喜欢这个语言,只是目前库还不够成熟。王垠喷Go能理解,做学术研究的对工程化的东西和要解决的实际工程中面临的问题不是很了解也压根不感兴趣。王垠好像只喜欢lisp。
    davepkxxx
        10
    davepkxxx  
       2013-05-16 12:56:33 +08:00
    Go的目的是从Java、C/C++、C#的市场里抢到一块。不谈语言层面,从社区、成熟度、类库上就不是几天能够干上的。
    RisingV
        11
    RisingV  
       2013-05-16 13:19:47 +08:00
    @davepkxxx 我好奇的是砍去Java、C/C++、C#的市场,还有什么市场?
    davepkxxx
        12
    davepkxxx  
       2013-05-16 14:03:05 +08:00
    @RisingV 还有很多啊。
    脚本语言,比如Shell、JavaScript。
    快速开发语言,比如Php、Ruby、Python。
    函数式,比如Lisp、ML。
    cloudzhou
        13
    cloudzhou  
       2013-05-16 14:19:19 +08:00
    如果你是想学习一门新的语言的话,强烈推荐。
    我对go了解不多,大部分都是通过介绍和小例子,但看了一些介绍文章。从我的经历来看go的一些好的特性:
    我早先学习过 c,perl,bash,目前主流使用 java 和 python。
    从动态语言和静态语言来看,真是各有优缺点,
    go是一种设计很严格的语言,编译要求很严格,连import的顺序都要求,强类型和预编译检查,
    而语法上有具备一些语法糖,用起来有动态语言的感觉。
    luikore
        14
    luikore  
       2013-05-16 15:08:21 +08:00   ❤️ 1
    unused 就出错的规定完全是玩死人, 而且编译器很多代码是根据这个假设写的, 估计以后也改不了.
    处理 json 很蛋疼, 各种要用 struct 映射, 把脑子拧过来的感觉 (如果我知道传过来里面有什么东西, 是什么类型的话, 我还用 json 干嘛?)

    动态语言 + C 还是现在最实用的组合, 完美处理所有问题. 一种语言当银弹用必然会蛋疼
    nsa
        15
    nsa  
       2013-05-16 15:28:16 +08:00
    坑++
    iamxhu
        16
    iamxhu  
       2013-05-16 15:41:20 +08:00
    Google出来个任何东西都会有人捧臭脚的,但是看着Go lang发布这好几年来的并没有获得多少份额,可以看到大众的投票。

    语法设计得即不利于机器读懂,又不利于人读,这是怎样的奇葩啊。
    skywalker
        17
    skywalker  
       2013-05-16 16:00:47 +08:00
    我觉得挺好的。王垠学了两年编程语言,可能对理论比较注重(记得他也挺看不起靠做googletest爬上去的某人),做go的rob pike, ken thompson他们几个都是在这个领域摸爬滚打几十年的,里面是有很多实用性的东西的,也包含了很多对现有语言的思考和特性选择。我觉得即使你不准备用go做日常开发也是很值得看一下的。
    Xg
        18
    Xg  
       2013-05-16 16:11:38 +08:00
    大家评价是最不靠谱的,鞋子舒不舒服只有自己的脚知道
    说别人土鳖的人,不知道有没有一个人人称赞的东西摆出来,比什么都有说服力
    另外,在现有的大环境下,FP比Go更流行不起来,同是小众,互秀优越感真是无聊
    Golevka
        19
    Golevka  
       2013-05-16 16:15:38 +08:00
    "Are you guys just trying to make the syntax look different?"
    RisingV
        20
    RisingV  
       2013-05-16 17:11:16 +08:00
    @davepkxxx 其实界限哪有那么明显。Go已经替代了Ruby、Python部分市场,虽然比例肯定还很小。事实上,你提及的所有这些语言之间都有或多或少的竞争关系。

    要区分的话,按照服务器和桌面来分,倒是可以的。Go显然现在比较适合服务器端的开发。而且这部分的市场很大,特别是初创公司,技术选型时,Go是值得考虑的。国内七牛云存储的go代码已经积累到30w+了。
    ShiningRay
        21
    ShiningRay  
       2013-05-16 17:34:29 +08:00
    Go是一门针对高并发的Practical的语言
    也就是在C/C++上针对工程应用中的常见的问题进行了一些完善了优化,而不是一种重理论的语言
    reusFork
        22
    reusFork  
       2013-05-16 18:08:11 +08:00
    有concurrency就足够了,其他缺点都不痛不痒
    python也有这样的并发支持就好了
    wodemyworld
        23
    wodemyworld  
       2013-05-16 19:21:18 +08:00
    定位不明的一个语言,执行效率不如c,快捷开发不如java,为啥用它呢,有人说并发好,其实只是google替你做了“工作”,而你也可以自己做这些“工作”,好多人没那个水平做这个,然后就说go的并发好,真是无语了。而且就算并发好又有什么用,IO速度能跟的上么
    nine
        24
    nine  
       2013-05-16 19:28:40 +08:00 via Android
    单进程跑满多核,就这一点就可以秒杀一切了。
    breeswish
        25
    breeswish  
       2013-05-16 19:33:45 +08:00 via Android
    Google给他制定的方向是c++和python的结合体,即既有python的便捷性又有c语言的高效性,但由于它有天然并发优势因此现在生产环境中更多地将它用于并发和分布式环境,比如说dotcloud云服务和bitly的消息服务这些都是go写的
    fx
        26
    fx  
       2013-05-16 19:39:00 +08:00
    @wodemyworld go 1.1的执行效率已经很接近c了. 另外,go的开发效率还是和java有的比的,就是库有点少.
    linuz
        27
    linuz  
       2013-05-16 19:41:41 +08:00
    想了解还是看看谁在用吧,听搞学术和没用过的人讲是最不靠谱的,
    你可以看看国内的七牛云存储:单个系统的代码30w+,代码量很庞大的同时能控制好复杂度,那么就证明了语言足够优秀。
    关于排名 可以参考lang-index.sourceforge.net
    gzb1985
        28
    gzb1985  
       2013-05-16 20:31:07 +08:00
    我没有深入使用过Go,只是看过介绍。我想提的一点是:
    虽然语言的层级有高有底,但是承认每种编程语言都有其设计的目的或者说初衷,有其擅长的地方,这点是讨论的基础。如果语言中有自己不喜欢的特性,也没有必要一味狂喷,我觉得考察其取舍,思考认为更合理的方案,是我辈程序员应该做的事情。
    今年或者明天要学习一种新的编程语言,Go应该是不错的选择。
    lidashuang
        29
    lidashuang  
       2013-05-16 20:50:47 +08:00
    没用过golang的,就不要扯淡了
    bhuztez
        30
    bhuztez  
       2013-05-16 20:55:22 +08:00
    @reusFork stackless ...
    bhuztez
        31
    bhuztez  
       2013-05-16 21:04:41 +08:00
    reusFork
        32
    reusFork  
       2013-05-17 02:24:39 +08:00
    @luikore 可以用 import _ package 和 _ = variable这种技巧
    reusFork
        33
    reusFork  
       2013-05-17 03:15:09 +08:00
    @bhuztez 这东西带来的麻烦比方便多
    cnbuff410
        34
    cnbuff410  
       2013-05-17 03:25:23 +08:00   ❤️ 1
    LZ,如果你真想知道这个语言怎么样,Go从入门到一个小项目不会花你超过3天时间,直接花两个周末就行了。至于土鳖不土鳖,你用它做几个项目了就知道了。
    xpfd
        35
    xpfd  
       2013-05-17 10:34:30 +08:00
    适合的就是最好的,写代码还纠结语言的好坏真是搞笑,就像在纠结用那支笔可以写出好文章一样
    davepkxxx
        36
    davepkxxx  
       2013-05-17 10:45:08 +08:00
    @xpfd 语言不是工具,而是材料,能影响到你成品的质量和功能。
    damngood
        37
    damngood  
       2013-05-17 11:34:01 +08:00
    正在用Go做一个项目, 用起来还挺舒服的.

    感觉就是一个更现代化, 更安全的 C

    基本的库都有, 比如数据库, Redis等..
    luikore
        38
    luikore  
       2013-05-17 12:39:29 +08:00
    如果以前是用java或者javascript的,应该会觉得go比较爽...

    @reusFork o_O以前不知道import _ package,可以加个编辑器命令...
    luikore
        39
    luikore  
       2013-05-17 12:41:12 +08:00
    @xpfd 最看不惯码农码得爽了, 一定要让他们用锤子写代码!
    hooluupog
        40
    hooluupog  
       2013-05-17 12:56:09 +08:00
    @xpfd 话说王垠是最反感这样的说法的,哈哈。
    damngood
        41
    damngood  
       2013-05-17 13:06:25 +08:00
    @luikore json 我用起来很舒服呀, Marshal UnMarshal一下就可以了.
    配合Struct Tag很方便的呀.
    luikore
        42
    luikore  
       2013-05-17 13:32:53 +08:00
    @damngood 搞hello world没什么难度,但一般跟别的系统交互,json结构不确定的,方法一:先unmarshal到一个小的struct里去,然后对这个struct的域做条件判断,然后再分几种情况unmarshal到几种不同的struct里去...方法二:unmarshal到map通过反射一层层搞... 都很蛋疼
    reusFork
        43
    reusFork  
       2013-05-17 14:14:33 +08:00
    @luikore 方法二再封装下还是能接受的 https://github.com/jmoiron/jsonq
    notedit
        44
    notedit  
       2013-05-17 14:20:48 +08:00
    有c 或者 python 基础的话 看个两三天就可以上手了
    已经写了上万行代码了 很喜欢
    luikore
        45
    luikore  
       2013-05-17 14:45:16 +08:00
    @reusFork 这个和我给java写的封装差不多... 只是有个小坑:array和object都用字符串index...
    damngood
        46
    damngood  
       2013-05-17 15:15:41 +08:00
    @luikore "json结构不确定" 这个就不能怪Go的json包不行导致蛋疼吧, 应该是你这个情况本来就蛋疼..
    内部系统交互甚至和别的系统的交互, 通讯格式不清楚的情况不多吧..
    luikore
        47
    luikore  
       2013-05-17 16:01:22 +08:00
    @damngood 有清楚的协议和结构固定不是一回事,你是没用过好用的,要不就是斯德哥尔摩了...
    damngood
        48
    damngood  
       2013-05-17 16:32:36 +08:00
    @luikore 这也能扯上斯德哥尔摩..

    我的意思是在大部分情况下配合 Tag 使用起来够简单了, 一行代码就ok了..

    在我用的的几种语言中, 就系统自带的库而言, 已经是很方便的了.
    xpfd
        49
    xpfd  
       2013-05-17 16:45:43 +08:00
    @hooluupog 真心不看好王垠 嘴炮一个 屁事没干成 净发些牢骚 浮躁的要命
    wodemyworld
        50
    wodemyworld  
       2013-05-18 08:51:04 +08:00
    @fx 执行效率能够接近c又如何。。。。。在已有的语言中已经可以满足这种需求了,有什么十足的理由让你一个人换自己熟悉的编程环境、库、历史代码呢,go生态环境也不完善,如果使用go,一定是它会代替某种语言,但目前看来,没有哪种语言可以被go替代
    cassyfar
        51
    cassyfar  
       2013-05-18 08:57:56 +08:00
    @nine 单进程跑满多核 说明了什么? 难道Go能单thread跑满多核?!
    damngood
        52
    damngood  
       2013-05-18 09:47:24 +08:00
    @wodemyworld 又的时候没啥理由, 仅仅是 for fun, 又的时候是被这门语言的一些特性给吸引了, 也有人是工作需要.. 一句话, 这都是缘分那.

    至于我自己, 这门语言有很多地方还蛮合我口味的, 比如,
    Go routine
    Error/Exception 处理方式
    C 熟悉的味道
    允许多个 Function 返回值
    对面向对象体系的淡化
    等等...

    当然要是能支持 Macro 就更好了, 跟别提见识了 Lisp Macro 之后的那丝丝遗憾..

    当然开始去用 Go 仅仅是for fun, 以上都是使用了之后感觉比较舒服的地方.

    至于库的问题嘛, 其实标准库里面提供的一般常用支持就不少.
    第三方的库常用的也基本有. http://code.google.com/p/go-wiki/wiki/Projects 这个页面包含了一些常用的第三方库, 而且还有不少库没有收录进来. 实在没有需要的库就自己写一个然后github一下吧, 一般来说也花不了多少时间的. 这样慢慢的就啥也不缺了 :)

    特别是最近看到又拍云也有提供 Go SDK, 当时就觉得有点小意外..

    要说"可以替代"这个问题, 任何 Server Side 语言理论上都是可以被 Go 替代的, 只是个有没有必要的问题了.

    用不用一门语言, 这都是看一个缘分..
    skywalker
        53
    skywalker  
       2013-05-18 10:19:31 +08:00
    @wodemyworld 现有语言中有哪些满足下列需求:

    1. 效率接近C
    2. 可以生成native的可执行程序
    3. 支持GC
    4. 对并发有很好的支持
    5. 编译快速

    况且语言设计中的很多细节其实是很难一两句话说清楚的,比如defer, interface, slice等等,这些东西用的时候都是很方便的。另外,go其实为程序员考虑很多,比如自带了gofmt,让你不用再为代码风格这种破玩意儿争论不休,还有godoc,都很方便。

    这些东西不是你瞄一眼就能体会的,只有使用了你才会体会到它的方便之处。

    另外go的目标不是替代什么语言,每个语言都有它的优势,但是已经不少公司开始用go替代python/ruby了。
    nine
        54
    nine  
       2013-05-19 09:47:15 +08:00
    @cassyfar
    在写web应用的时候,首先不需要webserver来做反向代理了,然后不需要一个php-fpm 、uwsgi 的东西来管理进程了。
    要做的只是安装一个任意linux版本,iptables里把80端口打开,push一个二进制程序并启动它。
    让运维变得更无所事事,让开发不再为部署头疼,这还不算逆天么?
    wodemyworld
        55
    wodemyworld  
       2013-05-19 22:16:04 +08:00
    @skywalker 不少公司,请举例说明哪个公司做项目用go了,最后成功了么,哪个产品用go了,成功了么
    如果不是替代某种语言,那它有什么用,现在的语言都已经满足要求了

    python + c++ 配合使用基本上所有的需求都没问题啊,另外那个并发问题根本就是个伪命题,不能说你自己不会搞并发编程就说go比其他语言高级,这是能力问题,不是go本身的优势
    可以说它把常用的算法编译了让你用,其他语言也有很好的高效的库啊,为什么不用呢,新的不代表比现有的好,只能是多个选择
    hooluupog
        56
    hooluupog  
       2013-05-19 22:23:07 +08:00
    @wodemyworld 今天刚看到hacker news上面一个新闻https://news.ycombinator.com/item?id=5731706 ,dotcloud用go重写了docker,这个东西之前用python写的。国内360和七牛都用到Go了,你可以了解下。Go相比python和rails有什么优势?目前我说不上,因为涉及的不深。但据我了解有一点是肯定的:节省了硬件。
    reusFork
        57
    reusFork  
       2013-05-19 23:09:05 +08:00 via Android
    @wodemyworld golang可以不用异步的方式来写并发程序,这是个很大的优点
    wodemyworld
        58
    wodemyworld  
       2013-05-19 23:48:11 +08:00   ❤️ 1
    @hooluupog 说一千道一万,用哪种语言的程序员性价比高那么哪种语言就收到企业欢迎,然后用的人就多起来了,可参考java;整并发的人不是价高么,用go就可以雇佣价低的弄并发的程序员了。有并发编程经验的人自己其实早就有一套自己的框架了,也很成熟,只不过,人家贵,现在找到便宜的了,如果此人离职,那么又可以雇佣其他人继续搞,不会像以前那种人走技术也跟着走了。
    这个是企业会考虑的东西,而不是这些公司用go是因为语言本身有什么其他语言干不了的事情
    skywalker
        59
    skywalker  
       2013-05-20 07:07:24 +08:00
    @wodemyworld 按照你的理论,dotcloud用了这么多python,应该有一套非常成熟的并发框架啦?那为啥还费劲的去搞自己不熟悉的go?37 signals做rails的时候为什么不用更容易招到人的php,而要用那时候还很非主流的ruby?twitter为什么不继续用ruby而转向scala,按照你说的他们应该有一套成熟的框架了啊?

    并不是图灵完备的语言都是等价的,做一样事情还是有难有易。你用C费死劲的玩意儿用go可能是很简单的。
    jjx
        60
    jjx  
       2013-05-20 07:38:47 +08:00
    看场合的,我有个设备固件升级的服务,原来用python , crc部分必须用cython做,否则太慢,练习着改go后 ,性能自然快很多。 不过 老实说也没有这个必要,原来也够用了。但对于一些对性能要求比较重要的场合,这样的升级还是有必要的。 不过python还可以尝试pypy,并非只有go这样的可选。至于异步,并发部分,python也有太多简单的选择 .

    以go 替代python ,受限于项目类型, 比方说,企业应用,像进销存, 我是死也不会动这种念头的

    所以,吸引python人员的,只是go比c++简单,但能直接上来做一些现代化项目。又能达到一定的性能。 go 现在最重要的是达到它的性能承诺,并且稳定,要人们普遍接受,现在估计还得一些时间。
    jjx
        61
    jjx  
       2013-05-20 07:42:00 +08:00
    python人员用go ,就个人的经历,并非是要替换python ,其实还是在替换性能无法优化的部分,但这些部分用c/c++太麻烦,摸索其它方案可能有风险。可以说其实替换的是还是c/c++部分。
    middleware
        62
    middleware  
       2013-05-20 09:01:34 +08:00
    Go 语言的很多特性是从 Lua 来的(如果仅考虑时间先后)。
    wodemyworld
        63
    wodemyworld  
       2013-05-20 09:11:54 +08:00
    @jjx 这个我同意,c++写出的东西很高效,但要求人的能力也很高,其实不是太麻烦,而是写出的东西如果不去做讲解的话,人员流动带来的风险很高
    wodemyworld
        64
    wodemyworld  
       2013-05-20 09:18:53 +08:00
    @skywalker twitter不用ruby是因为ruby on rails性能确实不行了,但同时又没有facebook的技术能力,facebook楞能把php优化到变态的级别,你twitter就没这个能力,或者有能力不想花成本;c++编写东西不比go繁杂,c++也有很完善的库啊,你把库当成语言特性理解也无问题啊。有人说c++太复杂,你不用复杂特性不就完了么,多重继承复杂,你别用啊,指针容易出问题,你也别用啊
    skywalker
        65
    skywalker  
       2013-05-20 09:59:20 +08:00
    @wodemyworld C++的问题不是这么简单能够解决的。

    1. 对于新手,很难把握哪些特性要用哪些不要用,即使是老手也很难说能把握。再说了,每个人对这个问题的判断都不一样,有些人觉得指针是很基本的,有些人可能就觉得是坑,所以每个公司都定义一套自己的编码规范,但这解决不了基本问题
    2. C++的库完善这点不太赞同。首先标准库就很残废,string连最基本的trim, split都不支持。其次,第三方库良莠不齐,风格也相差很大。现有比较综合的库里面比较好的可能Qt还算不错,但是要是跟Java那堆玩意儿比实在是差太多了。
    3. C++的编译速度很慢。相信做过比较大程序的对这个都印象深刻。特别是你的程序中包含大量模板的情况,简直不能忍受。
    4. 没有module。给代码重用带来了很大问题。

    模板没有concept啥的我就不说了...
    chenwl
        66
    chenwl  
       2013-05-20 10:00:43 +08:00
    建议学~学完再决定用不用~不用没损失,想用那说明对你有帮助~
    est
        67
    est  
       2013-05-20 10:33:00 +08:00
    @limu 哥们是明白人啊。。。。。。。。

    http://www.sizeofvoid.net/goroutine-under-the-hood/

    摘录一段

    > (5) 和所有其他并发框架里的协程一样,goroutine里所谓“无锁”的优点只在单线程下有效,如果$GOMAXPROCS > 1并且协程间需要通信,Go运行库会负责加锁保护数据,这也是为什么sieve.go这样的例子在多CPU多线程时反而更慢的原因
    dcoder
        68
    dcoder  
       2013-05-23 12:33:52 +08:00
    这里有个 Go VS Scala VS Node.js 的演讲,
    演讲的人是个 Go 粉
    breeswish
        69
    breeswish  
       2013-05-23 12:51:13 +08:00 via Android
    @wodemyworld 每个语言有自己擅长的地方,何必总是要说谁替换谁的。go语言自然有它吸引别人的地方。另外 有一些大公司招go是出于目前golang coder整体水平较高 做出来的东西靠谱 而不是雇佣起来价格低
    pubby
        70
    pubby  
       2013-05-24 15:35:00 +08:00
    会c单不会c++

    看某些人写的go如何如何,经不起诱惑尝试了一下。

    go开发效率比c高效,原本打算用c写的几个fastcgi服务都用go快速实现了

    感觉不足的地方,第三方库严重缺乏,尽管已经很多人贡献了一些,但是bug难免,得自己解决。

    好在import “C"可以使用其他动态库能解决一部分问题,只是无法静态编译进来,大量机器部署的时候麻烦点。


    看了上面评论,有赞有贬。对我而言,go可以让我相对较快的实现一些性能很不错的服务。
    aixinit
        71
    aixinit  
       2014-07-10 17:48:00 +08:00
    如果go 能像python一样使用json就好了。习惯了python的json处理
    liigo
        72
    liigo  
       2014-11-19 17:34:45 +08:00
    Go语言里有不少让我不爽的地方,参见我的CSDN博客文章《我为什么放弃Go语言》
    http://blog.csdn.net/liigo/article/details/23699459
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:58 · PVG 08:58 · LAX 16:58 · JFK 19:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.