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

写了一段时间 Golang,我很纳闷,为啥 Golang 这么火

  •  3
     
  •   sampeng · 2022-05-25 19:44:45 +08:00 · 13899 次点击
    这是一个创建于 938 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我唯一能想到的是可以换个赛道卷。 要啥没啥。。都得自己撸。。而且因为没有标准,就是完全随心所欲的写。写成什么样是什么样。除了简单,就没啥优点了。问题是太简单了,跟自动挡和手动挡之间的区别一样。看看别人实现的一些例子是很简单,但你要真的是可以用的。代码要膨胀十倍。个人感觉 golang 是把代码工程的问题交给了程序员去处理,程序员需要很大的心智去维护工程问题。。。

    随便看了几个开源项目的代码,因为很多特性没有。就是各种写死。各种模版代码。。。。 别扯运行速度快。。这是优点但真不是绝对优点。谁天天写高并发代码?全世界项目都是百万级并发?

    我知道存在即合理,但我真的没看出来 golang 有什么特别的亮点够他这么火。当初 php 是因为撸 web 快,现在是因为人人要撸百万级并发项目么?真的。。rust 都比他强。最少 rust 的工程性实在是解决了大量现代编程的问题。除了 rust 难学一点,但学什么不难呢?可惜,现在写 Rust 太少太少了,几乎没有求职空间。只能自己写小工具完,完全不敢在项目里面用。

    124 条回复    2023-07-04 16:10:38 +08:00
    1  2  
    huobazi
        101
    huobazi  
       2022-05-26 15:57:35 +08:00
    C# 大法好!
    stoluoyu
        102
    stoluoyu  
       2022-05-26 16:00:04 +08:00
    目前感觉对新人不是很友好,等有一个类似于 rails 的框架或许会好很多?
    ilylx2008
        103
    ilylx2008  
       2022-05-26 17:54:51 +08:00
    go 是 php 和 c/c++的替代品,能不火吗
    zhujq
        104
    zhujq  
       2022-05-26 17:58:02 +08:00
    我喜欢看这种引战贴,摸鱼专用
    ragnaroks
        105
    ragnaroks  
       2022-05-26 18:10:27 +08:00
    以前有多少写 PHP 的现在就有多少写 GO 的
    drackzy
        106
    drackzy  
       2022-05-26 18:27:12 +08:00
    https://madnight.github.io/githut/#/pull_requests/2021/4
    php 明显下滑趋势,Go 上升趋势,Rust 底部缓慢上升启动趋势。
    总之不要和大趋势作对。
    zzzkkk
        107
    zzzkkk  
       2022-05-26 19:20:37 +08:00
    @ragnaroks
    php 转 go 对写惯 php 的人来说还是很痛苦的! go 写起来垃圾啊 太辛苦
    转都是没办法
    FrankHB
        108
    FrankHB  
       2022-05-26 20:08:49 +08:00   ❤️ 1
    @LotusChuan OP 的问题虽然比较无聊,不过你这么一回倒是显得有澄清的价值了。
    简而言之,因为大部分职业菜鸡只是停留到 PM 喂什么就吃什么的入门阶段,学习成本平摊了,感知不强。
    如果要突击学几十个语言,有本事学得会的正常人都会觉得里面的大部分都是什么歪瓜裂枣,学来学去顶用的就那么点东西,时间精力大部分浪费在适应设计者奇怪癖好的 mdzz 上了。(就算这部分开销没整个项目大,无效劳动比例高到发指,加起来绝对不小。)
    ——别急着考虑这种情况不存在。有选型任务的技术管理多少会面临这种问题。另外职业年限多到被迫全栈和需要带小弟的也有类似的困难。
    跟架构不同的是架构的氵比较深的地方基本全是跟具体业务紧耦合的,所以会流行的东西反而不会那么多 nc 粉乱 bb ,知道雷点绕着走相对容易,不像语言不花够时间还被 nc 粉嘲讽没学会。而且搞架构一般不需要带人,培训值得讲的东西基本都有专门的讲师,破事少。
    LotusChuan
        109
    LotusChuan  
       2022-05-26 22:12:42 +08:00 via iPhone
    @FrankHB
    不是很理解你这段话的主题。我大概总结出你想说在一次性学很多门语言的情况下累计的学习时间会在整个项目中占很大的开销。

    但这种情况的前提是整个项目用的语言非常多并且参与项目的人对其中大部分都不了解,同时这个项目还要求代码是 sophisticate 和 idiomatic 。我感觉那这样没必要抱怨语言,直接骂项目管理是傻子就行了。
    vincent7245
        110
    vincent7245  
       2022-05-27 09:42:18 +08:00
    吹捧 go 的大部分都是 php 、前端转后端的人,因为学习成本低,又可以达到接近 C++的运行效率。你让他们从头学传 C++/java 他们肯定不愿意,所以 GO 就成了最优解。java 和 C++出身的人很少有无脑吹 GO 的,尤其是复杂业务系统,用 go 还不如用 c++。
    vincent7245
        111
    vincent7245  
       2022-05-27 10:05:47 +08:00
    @xsen
    举个例子,大数据领域的所有计算框架几乎都是复杂业务,比如 spark/flink/hadoop-yarn 等等,没有点技术功底连源码你都看不明白。眼光放宽一点,开发不只是 web 。
    Arnie97
        112
    Arnie97  
       2022-05-27 11:28:20 +08:00 via Android   ❤️ 1
    从公司的视角看,学习成本低才容易招到码农。在赢者通吃的时代,资本需要 10 个孕妇 10 个产房就能一个月生出孩子来,或者 20 个 30 个孕妇只生出一个也能接受,但是不能接受 10 个月生出来落后于竞品。人力和算力同时具备横向扩展性 (scalability) 的语言又有几种…

    是,Rust 设计的更优美,运行期性能更强,除了难没毛病,我自己也很喜欢,那又怎样?一个项目的成败,不只在于技术,而且可能技术不是主要因素。亲眼看着部门把原有 Rust 的项目代码重构成 Go ,因为招不到足够的人来开发维护,满足不了需求迭代节奏。就算我自己掌握和喜爱 Rust ,我不能一个人顶一百个研发,也招不到一百个会 Rust 的研发,我又能说什么呢。一旦有了这种先例,后面新项目选型时还敢用 Rust 技术栈么,项目不选 Rust 后续还会招 Rust 研发么。这还是在某家内部有一定 Rust 生态,正在本站招聘 Rust 研发的厂的打工体验。对于其他小厂来说,如果不是技术主导而是业务主导,就更没得选了,C++ 同理。
    yaott2020
        113
    yaott2020  
       2022-05-27 12:04:16 +08:00 via Android
    个人 web 项目不用 go 用啥
    xiaoriri666
        114
    xiaoriri666  
       2022-05-27 12:35:03 +08:00 via iPhone
    @Oktfolio ……现在都是 docker
    xiaoriri666
        115
    xiaoriri666  
       2022-05-27 12:51:33 +08:00 via iPhone
    @vincent7245 k8s ,docker 不都是 go 开发的,难道很简单?
    Akiya
        116
    Akiya  
       2022-05-27 15:02:30 +08:00
    写了一年多的 Go 了,写的还是很恶心, 比如:
    取两个 int 的最小值:
    a := int32(math.Min(float64(b), float64(c)))
    取一个 map 的所有 key:
    写 for 循环
    取两个 slice 的交集:
    写两个 for 循环
    xsen
        117
    xsen  
       2022-05-27 15:33:32 +08:00
    @vincent7245 #111 说的好像我第一次听说 hadoop/spakr/flink 一样,再复杂,有操作系统复杂么;再复杂,有浏览器复杂么

    而且对于绝大多数人来说,有几个人会有机会研发基础框架的?!
    xsen
        118
    xsen  
       2022-05-27 15:34:44 +08:00
    @vincent7245 #111 看代码,对我来说从来就不是难事。我看过基于 C/C++的百万级别、千万级别,或者更高级别的代码量的项目
    xsen
        119
    xsen  
       2022-05-27 15:36:54 +08:00
    @vincent7245 #110 你用过 C/C++么,你用过 Java 么。不好意思,每一种我都有 N 年经验
    但对于我来说,用过 C++,就不会再考虑 C ;用过 Java ,能不用 C++就不会用 C++;用过 Go ,那基本不会考虑 Java

    见得多,你自然知道有哪些好哪些不好,哪些可以忍受,哪些不可忍受
    LoNeFong
        120
    LoNeFong  
       2022-05-27 15:59:39 +08:00
    替你们老板求求你们了好好上班吧!天天语言大战有什么用啊,OP 也是闲的蛋疼,老板给钱就行,让用什么用什么,操什么心啊,写着 PV100 的业务,操着千万级,百万级的心
    FrankHB
        121
    FrankHB  
       2022-05-28 05:39:01 +08:00
    我说的是,这种表面的技术问题,根源是人。

    一次性学很多语言是极端情况。
    但大部分人长期没选型决策权,没余裕在项目需求上推三阻四拒绝学习新技术(语言是其显著代表),不管技术上是不是合理的(不用就得润),结果就习惯要么固守个别领域,要么就被随意差遣,更加对这方面事务没话语权。结果莫名其妙拱手放弃了支配自身技术发展路线的权力。
    即便一次就学一个新的,时间长了项目多了迟早等效:学习开销不随工程经验丰富而下降,收益却因为越来越有能力发现“新”语言的弱点而下降。越来越难发现好到值得投入学的语言,认真了反而像是给人免费当苦力推广;即便是发现坑为项目避雷,对个人生涯来讲也是净亏。

    破解无谓超额成本做法有两个:一是愿意同流合污,打不过就加入,有饭一起恰;二是自己开宗立派,取而代之。
    我这么点明了,自然一般人都想做后者。但这比把持选型决策权还难;而且被技术视野不够高的决策者支使惯了,需要独立思考的时候就躺了;所以现实大多会怂。
    更何况现实很少有人自己独立发现这层利害关系,就算想到了更加寄了。
    OP 和一些回复背后隐含类似的焦虑算是比彻底躺了的孺子可教,但脱离具体场景泛泛而谈个别缺点格局仍比较水,这是我说比较无聊的一个原因。

    只有对选择第二条路的人,考虑具体技术问题才有实用意义。
    不过说实话,我就感到这几十年还真是阿猫阿狗也敢整活了。
    有的大约就是单纯用的不被大众所知,但我还是嫌多了碍眼。比如 Squirrel 的实现连 REPL 的 EOF 都处理不对,这样的素质也敢有厂商搞当工业语言用。当然,小圈子语言嘛,跳出坑就行,比较容易逃避。
    有的是盲目从众。这时候上梁不正的后果就是灾难行的,比如 TC39 和 Guido van Rossum 连 proper tail call 都欠教育的水平。这是大部分人逃不过的部分,因为想要逃离毒害差不多是转行。

    至于 Go 是什么档次呢?
    设计 OS 水平先不论(虽然也存疑),Ken Thompson 在搞语言这块嘛,是个连什么叫 nominal typing 都没概念的( lambda-the-ultimate.org/node/4554#comment-71474 ),这样的水平能指望啥呢?
    另一方面,golang 的 spec 里把原来 C 叫 object 的东西硬是叫 variable 这样的原则上技术氵 13 问题到处都是,就更不说整个核心“社区”的质量了。
    写起来恶不恶心反倒是次要的,足够圣母觉得有救的用户,可以自己加个 pp phase 之类,多造半个语言改正缺陷或者适应需求变化(如 C→C++→C++/CLI )。而要是 spec 从根上整个没得救,连会设计语言的人士都不觉得魔改的必要,那就真寄了。

    当然不是说水平高见识多的屁股就一定正确,也可能一堆私货;比如 Robert Harper ( cf. github.com/JuliaLang/julia/issues/6113https://github.com/FrankHB/pl-docs/blob/master/zh-CN/typing-vs-typechecking.md )。
    大部分用户在这种层次的问题上,仍然逃离不了被大手子当放大观点的工具人使的命运。
    独立思考是不可能独立思考的,这辈子大约都不行了。

    现状就这样,不是照顾外行,golang 不值单独拎出来一提。其实这种 dssq 很多领域到处都是,也犯不着对某种语言的流行特别少见多怪了。这是我说无聊的另一个原因。
    vincent7245
        122
    vincent7245  
       2022-06-02 10:43:48 +08:00
    @xsen 您牛逼,我们都是小白,您说的都对,您开心就好
    sampeng
        123
    sampeng  
    OP
       2022-06-07 15:43:16 +08:00
    @FrankHB 说的对。。我却是提了一个无聊的问题。。。纯吐槽。也不是想引起 xx 大战,php 永远是世界上最好的语言。。。代码嘛,工具而已,其实顺手不顺手不决定工程上能不能用,那是老板 or 老大决定的。。但不妨碍有人吐槽说一个东西烂的离谱但满世界的学了 golang 下半辈子就有了的恶心感觉
    mlbjay
        124
    mlbjay  
       2023-07-04 16:10:38 +08:00
    我的亲身经历,主用 python 写 web api 。
    1. 想优化项目框架的性能用了 aysncio 的协程异步,但是大量库还不支持异步,结果新框架性能很好,但是第三方库因为同步 io 导致性能降低,和多线程并发没法区别了,就很蛋疼。
    2. python 的部署不光依赖虚拟环境,还依赖系统库,一个机器管理多个版本 py 或者 ubuntu 升级后,老项目难以部署,最后只能上 docker 容器部署。
    Golang 就能更好的解决这些问题,但是代价是 新语言新生态,开发比 python 麻烦 [也许是我写得少?] 。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5876 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 02:33 · PVG 10:33 · LAX 18:33 · JFK 21:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.