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

认真的问,要不要学学 go 语言?爱好级别的学习

  •  
  •   rizon ·
    othorizon · 2019-04-22 19:47:45 +08:00 via iPhone · 12469 次点击
    这是一个创建于 2071 天前的主题,其中的信息可能已经有所发展或是发生改变。
    爱好级别的学习,目前已经学了很多感兴趣的东西了。
    比如 python,nodejs。
    所以问问大家 go 语言要不要学一下?就是他有什么好玩的地方?

    比如 python,nodejs 我可以随时像 shell 那样写点脚本,而且有丰富的模块可以用,随拿随用,挺好玩的。
    那么 go 呢? go 有什么好玩的点吗? go 语言的特色? 我看有些人开发的工具是 go 的,直接执行 go get ? 就可以安装。。
    有点像 npm install 那样,似乎有点意思。

    另外,像 b 站等一些企业,为什么会转 go 呢?可以给分析一下吗?
    61 条回复    2019-04-24 11:41:09 +08:00
    peyppicp
        1
    peyppicp  
       2019-04-22 19:54:03 +08:00   ❤️ 2
    b 站 CTO 毛剑,是个 golang 的布道者,他作为 b 站 CTO,自然会让 b 站整体转向 golang
    python 作为后端语言性能有点太差了。性能和 java、golang 这种差距在两个数量级以上,反馈到响应时间,服务器价格上就不少钱了。而且 python 动态语言重构起来就是火葬场。
    golang 目前有几种解决依赖的方式,一种是 b 站那种用第三方工具比如 govendor 放到 vendor 目录的,还有原生的 go mod,和最简单的 go get

    如果单纯学编程语言是为了好玩,就学 Python 吧,golang 类似 java,是工业级语言
    agdhole
        2
    agdhole  
       2019-04-22 19:59:17 +08:00 via Android   ❤️ 5
    追求开发的爽 c# 欢迎你
    SuperMild
        3
    SuperMild  
       2019-04-22 20:12:19 +08:00
    作为爱好,建议学 Kotlin,可非常方便使用 Java 库,语言本身也非常精妙。Go 为了降低学习成本和加快编译速度,在语言特性方面很吝啬。
    ihciah
        4
    ihciah  
       2019-04-22 20:17:14 +08:00
    可以无痛协程这点比较舒服
    zonyitoo
        5
    zonyitoo  
       2019-04-23 00:39:34 +08:00   ❤️ 2
    学习语言,学 Go 可以说不会学到什么好的。要学就学一点 21 世纪设计的语言,不要学这种过时的东西。
    chenqh
        6
    chenqh  
       2019-04-23 04:15:58 +08:00
    要不学下前端,让你体会不一样的感觉
    0bject
        7
    0bject  
       2019-04-23 05:40:26 +08:00
    @zonyitoo 我没看懂你的意思, 是说 Go 不好吗. 什么是 21 世纪设计的语言, 是说 Go 过时了吗
    medivh
        8
    medivh  
       2019-04-23 06:03:54 +08:00
    @0bject go 的设计理念是面向工程的,有些设计为了性能和兼容性妥协的很厉害,甚至不如现代 Java ;
    如果想要学习一门能带给你不同编程思想,又有一定实用价值的语言可以考虑 jvm 上面的几个新语言,或者 F#也是不错的
    q397064399
        9
    q397064399  
       2019-04-23 06:19:21 +08:00
    @medivh #8 不是妥协,是阉割.. 你们用不到泛型,阉 你们不会用异常的,返回值才是王道 ,阉

    学语言 就裁剪 C++ 随便学,把 C++/汇编 学的差不多,天下语言都一样
    jadeity
        10
    jadeity  
       2019-04-23 08:27:39 +08:00   ❤️ 1
    我也是爱好级别,开始用 python 挺爽,后来 async 不懂,转 go 就方便了。
    yhzwy
        11
    yhzwy  
       2019-04-23 08:28:07 +08:00
    我还以为你想学习一下 b 站代码
    reus
        12
    reus  
       2019-04-23 08:32:41 +08:00
    @q397064399 运行时反射不给你用吗? panic/recovery 不给你用吗?
    blless
        13
    blless  
       2019-04-23 08:36:36 +08:00 via Android
    学!以前想用 python 写个小程序给朋友用…最后打包 /给朋友装 python 都没成功…直接放弃了,go 简直不要太简单…一键直出 exe
    sailing0505
        14
    sailing0505  
       2019-04-23 08:41:40 +08:00 via Android   ❤️ 1
    语言只是工具,设计,算法跟数据才是灵魂。建议楼主把精力用到正确的地方。
    gbin
        15
    gbin  
       2019-04-23 08:44:27 +08:00 via Android
    程序员语言鄙视链已经来袭...
    geekc3t
        16
    geekc3t  
       2019-04-23 08:48:02 +08:00   ❤️ 1
    不如学学 elixir,clojure,erlang 之类
    676529483
        17
    676529483  
       2019-04-23 08:48:02 +08:00
    本人也是 pythoner 和 go 爱好者,go 的优势在运行效率、部署(直接二进制拷贝),开发中解决依赖并不是它的强项。还有如果你多次被 asyncio 折磨的死去活来,那么 go 吧,和线程一样就能实现 async/await 写法
    leonme
        18
    leonme  
       2019-04-23 08:50:10 +08:00 via Android
    学 scala 啊,手动 doge
    Canon1014
        19
    Canon1014  
       2019-04-23 08:51:00 +08:00
    有没有大佬知道昨天 B 站那个源码是什么框架的?
    passerbytiny
        20
    passerbytiny  
       2019-04-23 08:54:22 +08:00   ❤️ 1
    如果只是为了好玩和写脚本,你可以去学学 Bash。

    实际上,任何语言——包括你已经学过的 python、nodejs,当你深入的时候,你都会发现不好玩。

    还有,nodejs 不是语言。
    BCy66drFCvk1Ou87
        21
    BCy66drFCvk1Ou87  
       2019-04-23 08:56:19 +08:00   ❤️ 1
    @Canon1014 是自己写的架子
    chinesehuazhou
        22
    chinesehuazhou  
       2019-04-23 08:57:23 +08:00 via Android   ❤️ 1
    jeffersonpig
        23
    jeffersonpig  
       2019-04-23 08:58:47 +08:00
    你在这里等着别人给出各自看法,还不如花两天时间过一遍 go 的语法了解下 go 的工具链,自然就知道你会不会喜欢了
    suzic
        24
    suzic  
       2019-04-23 09:06:52 +08:00 via Android
    分布式?
    Qzier
        25
    Qzier  
       2019-04-23 09:13:03 +08:00 via iPhone
    必须学,语法简单,部署方便。
    murmur
        26
    murmur  
       2019-04-23 09:13:31 +08:00
    学啊,不学 go 你怎么守护二刺螈
    zjsxwc
        27
    zjsxwc  
       2019-04-23 09:14:49 +08:00
    c++一把梭,学神马 go
    marsgt
        28
    marsgt  
       2019-04-23 09:16:01 +08:00
    “ PHP 有 Go 烂。”

    (层主已跑路......
    brucewuio
        29
    brucewuio  
       2019-04-23 09:17:34 +08:00
    不要为了学而学 你自己要干什么先? 然后在找出一个很符合自己需求的工具
    marsgt
        30
    marsgt  
       2019-04-23 09:22:14 +08:00
    我觉得学一下是可以的,去看看它的语法,它的坑,想想为什么要这么设计(或者说这种设计解决了什么问题,又带来了什么问题)。
    语言学的多了,你的关注点会慢慢转移到它们的共性上,也就是数据结构和底层原理,把这块搞懂之后,你会发现语言本身不是个问题,问题在于代码的逻辑。
    另外也可以看看《代码的未来》或者这个类型的书,是 Ruby 语言的发明者谈语言设计和趋势的。
    tt67wq
        31
    tt67wq  
       2019-04-23 09:22:27 +08:00
    @peyppicp #1 请定义工业级
    reus
        32
    reus  
       2019-04-23 09:27:04 +08:00
    @chinesehuazhou 这篇文章错漏百出,基本就是误导人的东西
    IsaacYoung
        33
    IsaacYoung  
       2019-04-23 09:27:29 +08:00 via iPhone
    不用学 浪费时间
    jasonyang9
        34
    jasonyang9  
       2019-04-23 09:40:36 +08:00
    人家整个站都开源了,为了表示敬意也要学一学
    zonyitoo
        35
    zonyitoo  
       2019-04-23 09:43:16 +08:00
    @0bject Go 的设计都是上世纪的语言才这样做。你如果是作为学习编程语言的用途,学 Go 没一点用处
    q397064399
        36
    q397064399  
       2019-04-23 09:48:13 +08:00   ❤️ 1
    @reus #12 这些破玩意 有什么意思呢? 就 golang 那些个东西 C++/Java 里面都有,比 Go 做的好得多,
    你要是 Go 社区的吹 那就算了,实事求是的讲 9012 年了 连个包管理系统都搞不定的玩意 有什么好学的?

    高性能 实时性 打不过 C/C++, 快速开发 成熟的包管理体系 开源工具库 统一的开发规范 打不过 Java,本身应用场景又少,
    勉强在一些领域当个 better C 还可以,就目前所见 投入产出性价比贼低..
    Belmode
        37
    Belmode  
       2019-04-23 09:53:49 +08:00 via Android
    @sailing0505 语言确实是工具,可是你工具都不会用,拿什么建造算法数据结构的大厦?
    DJQTDJ
        38
    DJQTDJ  
       2019-04-23 09:56:33 +08:00
    学的话,不如学 C
    这几年,真的是国内各种鼓吹学那些没有用的,不能说没有用,但是学完了之后根本没有时间的酝酿。一瓶子不满半瓶子晃的阶段!
    当年鼓吹,并且我还真的下载了盗版 PDF 学习的语言,不知道楼上这些有没有中枪
    R、Julia、Apex、Clojure、Ladder Logic、Logo、Kotlin、Scala、Scratch、Lua、D、Go、Swift、MATLAB、Python、Ruby

    说实话,当初 r 和 ruby 吹的可是一年比一年狠,不知道 python 能走多远,不过说实话,pyton 国内门槛越来越低,但是国外门槛很高。。。。
    tt67wq
        39
    tt67wq  
       2019-04-23 09:58:38 +08:00
    可以学学 erlang 或者 elixir,重点学 let it crash 和 otp 思想,受益颇多。
    starcraft
        40
    starcraft  
       2019-04-23 09:58:51 +08:00   ❤️ 1
    go 和 c#在国内的热度都属于畸形。关于 b 站,仅仅只是因为领导 mj 是个狂热分子。
    sanbenweiyang
        41
    sanbenweiyang  
       2019-04-23 10:05:28 +08:00
    学习 Golang 服务器,建议看这个项目 https://github.com/aceld/zinx
    charten
        42
    charten  
       2019-04-23 10:06:42 +08:00
    要不来学前端吧?前端什么都能搞、、、什么机器学习 图像识别 音频处理之类的都可以搞,就是性能渣而已
    myyou
        43
    myyou  
       2019-04-23 10:13:33 +08:00   ❤️ 1
    要不要学 scheme,推荐 chez scheme,可能什么都做不了,但可以装逼。
    moloach
        44
    moloach  
       2019-04-23 10:21:44 +08:00
    想学就学呗,反正 go 语言不难,网上有大把的教程,github 上也有大把的项目开源!使用方便度上来说肯定没有 python 易用。性能还行,比起 java 这个吃内存大户,go 显得良心多了!对于写业务逻辑来说 go 语言是一个很不错的选择,虽然错误处理很恶心!
    kios
        45
    kios  
       2019-04-23 10:42:34 +08:00
    @zonyitoo 那么请问 C 过时吗? C++ 过时吗?
    lnim
        46
    lnim  
       2019-04-23 10:48:33 +08:00
    学 Swift 啊 !!!! 支持多编程范式, 集 C# 优点,
    gowk
        47
    gowk  
       2019-04-23 11:00:35 +08:00
    我认为 Go 写起来很爽,起码比 Java 爽太多,但还是要结合业务。窃以为,把 Java、Javascript、Go 这三门语言作为你们的主力语言,你的职业生涯会变得更加得心应手一些。
    but,如果 Go 添加了 Generics,我会用 Go 写所有的项目。Go for everything.
    q397064399
        48
    q397064399  
       2019-04-23 11:21:37 +08:00
    @DJQTDJ #38 结果没一个能打的,C/C++ Java Python Javascript 还是常年霸居榜首
    alexmy
        49
    alexmy  
       2019-04-23 11:21:45 +08:00
    昨天 B 站都被做了那么大的贡献了。我目前就在用 go 做后端服务。
    JerryCha
        50
    JerryCha  
       2019-04-23 11:28:15 +08:00   ❤️ 1
    学啊,其他语言有 openbilibili 这种开源的工业项目源代码么(手动狗头)
    AlphaTr
        51
    AlphaTr  
       2019-04-23 11:28:43 +08:00   ❤️ 1
    @Canon1014 看看 B 站开源的这个框架 https://github.com/bilibili/kratos
    KIMMG
        52
    KIMMG  
       2019-04-23 11:33:49 +08:00
    <a href="https://imgchr.com/i/EA6gjP"><img src="https://s2.ax1x.com/2019/04/23/EA6gjP.md.png" alt="EA6gjP.png" border="0" /></a>
    wtks1
        53
    wtks1  
       2019-04-23 11:47:35 +08:00 via Android
    @agdhole 我们公司的 C#已经在陆续重构成 java 了,那个工期拖延的叫一个酸爽
    reus
        54
    reus  
       2019-04-23 12:00:38 +08:00
    @q397064399 槽点太多,还是不反驳你了,反正你装睡的。
    exploreXin
        55
    exploreXin  
       2019-04-23 13:06:08 +08:00   ❤️ 9
    当我们讨论编程语言优劣的时候,往往忽略一个很重要的问题:编程语言的本质,承载人类发出的控制信息,用于指挥计算机产生某种行为,从而满足人类的生产,生活等需求。如果不明确这一出发点,就不能深刻认识到我们将要讨论的问题。

    从编程语言本质可以看出,编程语言的作用是承载信息用于控制计算机,那么所承载的信息是哪里来的?答案是人脑。我们几乎绝大部分工程师在参与软件开发的过程中都没有认识到一件事情,真正的终端是人脑,信息产生于人脑,网络连接的是人脑与人脑,人脑是信息产生处理的源头和终点。计算机只是量变了人脑之间的通信,至少在强人工智能实现以前,都不会质变这个过程。所以计算装置的总设计纲领产生于人脑,而软件也包括在内,编程语言就更加属于这个范畴。

    现在再来看要不要学某门语言的问题,编程语言之间的最大区别其实是底层编译器的区别,编译器的区别在于编写编译器的开发人群之间的区别,所以最终产生区别的发源地是开发人员对于世界认知的不同,导致不同的编程映射方式,有的语言语句不用分号结尾,有的语言可以有分号,也可以没有分号,这些区别都不是浑然天成的,他们产生于软件作者的不同世界观,才产生了不同的语言差别。一个开发者如果融入符合自己世界观的开发者社区,将会如虎添翼,如果进入了与自己世界观不同的社区,将犹如进入地狱一样,极端的例子例如:Linus 极度讨厌 C++。

    当然了,世界观也是一点一点养成的,早年的经历,工作当中接触的技术会影响我们的世界观,再加上自身性格与对世界的认知,最终形成我们对于编程语言的口味,使你在用某个语言时特别舒服,而某些语言让你生不如死,但是对于别人,也许这生不如死的语言正是他们的最爱,这也是编程语言战争的导火索,我们都倾向我们喜爱的语言,痛恨另自己难受的语言。所以产生语言战争的根本原因不是语言的优劣,而是我们人脑的偏见导致的。

    有人说,我这么多年也没有过热爱什么语言,也没有痛恨过什么语言,这是为什么呢?这是因为,我国信息产业还处在初级阶段,国家层面上的研发还停留在应用开发的阶段,我们的底层研发人员凤毛麟角,这切断了我们产生自主软件世界观的源头,我们只是拿国外开发的系统,语言来用,融入别人的世界观,然后贡献自己的代码,而我们东方特有的世界观极少有机会能够产生自己的软件生态,知乎上无数人追问为什么国内没有产生伟大的编程语言,就是因为这些原因,想来甚是可惜。不过随着国家的不断发展,我相信总有一天国人能够拥有自己的软件生态,不再受制于人。

    那么问题来了,到底要不要学 Go,不同的人答案不同,如果你的底层世界观和 Go 语言社区相一致,那么果断融入,也许将来能够赶上下一波潮流,以后升职加薪那是少不了的。如果自己所在领域,以前的语言与 Go 的哲学差异很大,那就要慎重一些,毕竟不同世界的事物想要融合,将需要巨大的时间去催化,而开发人员的时间又是及其宝贵的,所以建议慎重选择。如果单纯想提高哦收入,学一套自己所用语言的新的框架,时间利用率会高的多。

    最后,如果你读了上面的文字,觉得像神仙打架,不知所云,那么说明你还停留在代码搬运的表层阶段,闲暇之余多读一些计算机科学方面的书籍,有助于改善这个问题,底层知识的力量就在于能够让你彻底认知一个问题,而不是流于表面,人云亦云,别人说的就一定对吗? No,要我自己审视推敲证明是对的,才能说是对的,否则我们就只能像个路由器一样,接收转发,没有一点自主权利。对于 Go 呢,我还是推荐了解一下 Go 语言的,国内不流行不说明就不优秀,看看 Go 语言创始人都有谁你就会知道,至少冲着大神们的招牌,应该错不了,具体怎么样,等细细研究过 Go 语言之后,相信定会受益匪浅。
    iceheart
        56
    iceheart  
       2019-04-23 13:25:17 +08:00 via Android
    跟其他语言比,Go 的协程极其好用。
    如果说硬挑点毛病,那就是协程没有局部存储。
    ntop
        57
    ntop  
       2019-04-23 13:48:39 +08:00
    我司现在整个后端都是用 Go 写的,以前用过 ROR/Spring/Django 之类的,感觉还是 Go 爽一些... 前面 3 个框架需要背、记很多东西,但是 Go 的很多东西都是一个库,比较符合我们这种不爱学习的同学,看看 API 就可以演绎出各种用法,满足各种需求。部署也很方面,直接在本地交叉编译得到一个二进制扔到服务器就行了。我司的产品:卡哇微社区( kawaapp.com )刚上线,有兴趣的可以关注下,哈哈.
    pursuer
        58
    pursuer  
       2019-04-23 14:03:00 +08:00
    目前学到过的语言中,带自动 GC 的,我喜欢 Kotlin,不带的,我推荐学习 C/C++,Rust 也可以试试,开发网络相关项目,我推荐 GO,因为可以很容易开发高并发服务。其实很多语言之所以出现都是因为在特定的应用场景中会更好用
    HarrisonZ
        59
    HarrisonZ  
       2019-04-23 17:43:28 +08:00
    golang 是工程语言,不用来写项目就不用学了也没啥学的。兴趣还是学 c++或者 rust
    sailing0505
        60
    sailing0505  
       2019-04-23 23:16:37 +08:00 via Android
    @Belmode 可能你误会我的意思了。我只是建议从算法,数据结构入手,然后对应选择一门喜欢的语言,语言这个东西属于熟能生巧的。不要花太多精力在无法上面。当你写熟了,bash 都能写出面向对象的感觉。
    1024MB
        61
    1024MB  
       2019-04-24 11:41:09 +08:00
    rust 大法好,ruby🐂🍺。。。抱歉,走错地了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:33 · PVG 08:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.