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

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

  •  
  •   rizon · 31 天前用 iPhone 发布 · 6650 次点击
    这是一个创建于 31 天前的主题,其中的信息可能已经有所发展或是发生改变。
    爱好级别的学习,目前已经学了很多感兴趣的东西了。
    比如 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
        1
    peyppicp   31 天前   ♥ 1
    b 站 CTO 毛剑,是个 golang 的布道者,他作为 b 站 CTO,自然会让 b 站整体转向 golang
    python 作为后端语言性能有点太差了。性能和 java、golang 这种差距在两个数量级以上,反馈到响应时间,服务器价格上就不少钱了。而且 python 动态语言重构起来就是火葬场。
    golang 目前有几种解决依赖的方式,一种是 b 站那种用第三方工具比如 govendor 放到 vendor 目录的,还有原生的 go mod,和最简单的 go get

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

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

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

    还有,nodejs 不是语言。
        21
    HuasLeung   30 天前   ♥ 1
    @Canon1014 是自己写的架子
        22
    chinesehuazhou   30 天前 via Android   ♥ 1
        23
    jeffersonpig   30 天前
    你在这里等着别人给出各自看法,还不如花两天时间过一遍 go 的语法了解下 go 的工具链,自然就知道你会不会喜欢了
        24
    suzic   30 天前 via Android
    分布式?
        25
    Qzier   30 天前 via iPhone
    必须学,语法简单,部署方便。
        26
    murmur   30 天前
    学啊,不学 go 你怎么守护二刺螈
        27
    zjsxwc   30 天前
    c++一把梭,学神马 go
        28
    marsgt   30 天前
    “ PHP 有 Go 烂。”

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

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

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

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

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

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

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

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

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