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

Java 玩腻了 其实发现 golang 也还不错 确实很简洁

  •  
  •   silentsky · 105 天前 via Android · 13365 次点击
    这是一个创建于 105 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  105 天前
    有个疑问:刚了解了 golang 的 web 框架,感觉真的是百花齐放,数量不少,不像 java 基本就是 spring 全家桶,还有各种第三方包,我在想这种情况下会不会造成学习难度比 java 大呢
    179 条回复    2024-02-05 00:39:00 +08:00
    1  2  
    silentsky
        101
    silentsky  
    OP
       104 天前
    @diagnostics 非常同意 有时花时间的并不在语言本身 语言之外如业务理解、架构流程等也是极为重要
    diagnostics
        102
    diagnostics  
       104 天前   ❤️ 2
    @lesismal #61

    > 所以对我而言,java 这种没有系统编程能力、性能有限、臃肿直到宇宙尽头、非常浪费硬件的“垃圾”


    哥们,求求你了,去把 Flink 重写,中国开源第一人应该就是你了。你知道大数据用多少台机器,都跑在 JVM 下吗?我记得前几年阿里宣传 Fink 的案例好像都是千台服务,你用 Go 重写应该能降到 500 台以下吧?别的不说,达摩院院长你来当
    silentsky
        103
    silentsky  
    OP
       104 天前
    @diagnostics quarkus 这个词出现在我视野的次数确实不多 后面多了 我可能会去看看
    Torpedo
        104
    Torpedo  
       104 天前   ❤️ 2
    @lesismal 很同意第二段。作为一个工作也 7 、8 年的前端,我合作过各种语言的后端。java 的后端有个很明显的现象(不止一个)就是你和对接口,我和他说咱们按照 http 协议怎么着,他和你讲他的框架怎么怎么着。
    当然可以说这些 java 水平不够,但是别的语言后端菜逼我也合作过,但是只有 java 的后端他们明显更难从 http 协议来讨论,而不是给我聊你的框架怎么怎么
    sunny352787
        105
    sunny352787  
       104 天前   ❤️ 1
    @diagnostics lesismal 写的 nbio 网络框架我的项目在用,你写了啥?
    yh7gdiaYW
        106
    yh7gdiaYW  
       104 天前
    @label 是这么个意思,Java 已经形成了一套标准的开发规范,一个有经验的正职带领一群外包,就能开发出很不错的产品。现在用 Python 这块儿就很蛋疼,手下这群外包真是各显神通...
    fionasit007
        107
    fionasit007  
       104 天前
    之前没写过 go ,前一阵接了一个坑,别人留下的 go 项目,给哦的感觉得就是 go 又杂又乱,不知道是不是他用的框架和写的代码问题,具体说起来也不好说,反正就是写的不舒服🤣
    edwinyzhang
        108
    edwinyzhang  
       104 天前
    @Lockeysama 我喜欢强类型,写 python 经常代码写着写着自己看不懂了。就是因为没定义类
    mightybruce
        109
    mightybruce  
       104 天前   ❤️ 1
    @diagnostics 人家的项目至少在他的工作领域方面很不错, 你有神马,你还不是嘴炮。
    另外你不会知道大数据现在已经也在变化吧, 这都是来自于谷歌的大数据论文。
    chaleaochexist
        110
    chaleaochexist  
       104 天前   ❤️ 1
    我在想这种情况下会不会造成学习难度比 java 大呢?
    >>> 绝对不会...
    刚了解了 golang 的 web 框架,感觉真的是百花齐放,数量不少
    >>> 单轮 web 框架的话, 如果你不知道用哪个, 无脑 gin. 如果你不知道用哪个 ORM 的话 无脑 GORM.
    那如果用其他的呢?
    >>> 现用先学绝对来得及.
    wanqiangcrack
        111
    wanqiangcrack  
       104 天前
    @lesismal 脱离业务需求去谈语言是正儿八经的纸上谈兵。

    本来是不想说话的,但是看到这篇长文还是出来了。 被 Java 的臃肿恶心到了,请问是哪方面的臃肿,如果你说的是语法糖比较少,那我信了。起码得说一下到底臃肿在哪了。这时候就不得不说为什么现在最流行的部署版本是 1.8 的原因了。 原因就是,为什么要换新版本? Java 最早设计的是面向全平台的,有不同的版本 ME SE SERVER 的。现在基本上使用最广泛的就是中型或重型企业级的应用,那为什么这些企业倾向于使用 Java 呢? 因为稳定、可靠、久经考验、成熟的生态和以 Oracle 为首的本身作为企业级服务提供商的大企业背书,对于 Java 自身所适应的业务方案,他就是最佳选择。 如果不打算使用动态特性,对代码进行 Native 编译,其性能是基本和 cpp 持平的,很好理解,因为大家都是机器码,就是要抛弃 Java 的很有有用且优秀的特性,例如反射,动态加载。 “所谓的生态优势”,微软都要哭了好么? 生态就是语言最大的护城河啊 这点都不明白还出来讨论啥语言。。 只要 Java 本身还在持续的迭代,还继续有大企业背书,其性能和可靠性依然与同类语言基本持平,他的地位就是不可取代的。kotlin? kotlin 也不行的。Java 背后还有个 JCP 来控制整个生态的可持续和稳定性呢。对于 web 来说,目前还没有 Java 不适应的领域呢,做游戏服务端用 Java 的也比比皆是,毕竟 GraalVM 之后,其本地化之后对资源占用率有很大程度的优化。 当然,没有白吃的内存,除非是内存泄漏。吃掉的资源一部分是用来提供动态特性的支持,一部分就是用来维持其稳定性的。 有可以出错的余量,才会稳定。 能保证程序一定不出错么? 基本是不能的。

    “Javaer 遇到复杂点的问题比较容易懵逼”,不好意思,这事儿不是说用哪种语言的人会这样,是这类人是这样的。 就不展开说了。

    脱离你的业务场景去谈我要用什么语言是很无聊的, 除非你是架构师,架构你说算了,或你是技术总监, 技术路线你说了算,或者说你有用 golang 去做中型或重型企业级应用的丰富经验,觉得可行并能够说动以上两种人去做,那完全没问题,那你说的就是完全正确的。 有人说 Java 不厉害,厉害的是 JVM , 嗯 我完全赞同。但这俩是一块出生的,所以就一块共生到现在了,就是这么无解。
    silentsky
        112
    silentsky  
    OP
       104 天前   ❤️ 1
    @lesismal 看了 nbio 确实是 golang 大佬
    chaleaochexist
        113
    chaleaochexist  
       104 天前
    @silentsky golang 的反射和动态加载能力很若.
    导致 java 里面很多框架基于 spis 动态代理等方式在 golang 里面行不通.
    所以 golang 很多框架都是通过生成代码的方式进行的. 用的多了有点烦躁.
    参考: https://github.com/sqlc-dev/sqlc
    https://github.com/ent/ent
    GRPC
    protobuf 等
    ZeroDu
        114
    ZeroDu  
       104 天前
    go 简洁,还是怀念 java 的 hutool 、各种 util 、common 。缺少开箱即用的感觉,各种操作都折腾一下。go 那边缺少 spring 这种大型的组织,各个 web 框架都是个人或者几个人在维护
    Chad0000
        115
    Chad0000  
       104 天前
    说得好,不过我站 C#这边。
    runliuv
        116
    runliuv  
       104 天前
    说得好,我选择 C#
    chaleaochexist
        117
    chaleaochexist  
       104 天前
    @wanqiangcrack #110
    我举个臃肿(复杂)的例子.

    就以 python/go/java 举例子.

    如果你是一个有经验的工程师, 给你一个陌生的 python/go 项目,自己捅咕捅咕就能跑起来.
    我敢保证 java 项目绝对一脸懵逼.
    mightybruce
        118
    mightybruce  
       104 天前
    说 java 不错的麻烦就不要谈神马性能了, 天天用 spring 全家桶的人根本不配谈性能, 和 cpp 持平基本没几个人能做到

    java 的确是成熟的业务开发必备, 开发起来效率搞。降低程序员的门槛, 连代码都写得整齐划一,没有特点
    如果你不是科班没问题,都是吃饭, 业务开发隔离了很多计算机知识本质就是企业的考虑,好控制人员和成本,缺你都有的是人。
    XXWHCA
        119
    XXWHCA  
       104 天前
    可以写 Kotlin 嘛,体验一下 java 没有的特性
    beneo
        120
    beneo  
       104 天前   ❤️ 1
    @lesismal 大神如何处理堆栈的,使用 go 语言的时候,比方说 gorm ,一个打印的异常,堆栈都没有,很那去追到代码里面,然后查看是哪行代码错了
    mmdsun
        121
    mmdsun  
       104 天前
    @yusheng88 java 虚拟线程的标准库也重写了,删去了大量的阻塞代码。
    orm
        122
    orm  
       104 天前
    还得是 OP ,懂得 V2er 的 G 点
    diagnostics
        123
    diagnostics  
       104 天前
    @sunny352787
    @mightybruce #109

    不敢不敢,我没能力,说出来的话,感觉丢其他的脸,拿这个东西来比。
    Go 宇宙第一语言~!
    dragondove
        124
    dragondove  
       104 天前
    @chaleaochexist java 项目现在可以用 mvnw 或者 gradlew ,跑起来直接 ./gradlew bootJar 就跑起来了,一个陌生的 python 程序,你得先虚拟环境,然后 pip install -r 然后运行,有时候还因为 requirements.txt 没写全跑不起来,很多语言的依赖管理都不如 maven/gradle ,maven 被人诟病的主要也就 xml 了,本身还是挺好用的。
    MaxFang
        125
    MaxFang  
       104 天前
    都什么年代了,就不要再在语言上争了。能赚钱的,成本合理就好啦。
    mightybruce
        126
    mightybruce  
       104 天前
    @diagnostics
    你嘴里还不是讲几个框架,你不会认为人家没有开源一些流式计算就没有吧。原来懂点框架的程序猿也会觉得自己牛逼, 你说的 apache spark 其中就已经有了替代。
    DASK 以及 Ray 的分布式计算麻烦了解一下。
    另外我告诉你一句, 你了解的也不过是过去的技术,不代表未来的技术栈。
    liprais
        127
    liprais  
       104 天前
    @mightybruce 笑死我了好么 dask/ray 自己都不觉得能对标 spark
    veightz
        128
    veightz  
       104 天前
    - golang 写单体小应用比较快捷, 部署也比较方便
    - 启动内存有明显优势, 自己的小机器都可以比较轻松的部署

    - cpu 和 gc 比较一般. 小项目 gc 问题不是很明显. 但是可用性和 rt 敏感的服务, 还是能明显抖动的
    - 原生 json 性能一般. 解析大 json , cpu 和 内存表现一般, gc 的时候再消耗掉一部分 cpu

    个人感觉:
    - 平时写小玩意儿很方便, 性能比脚本语言肯定好
    - 部署简单, Python 我自己本地小工具不少, 涉及部署, 有点头疼
    - 语法比较贫瘠.. 有时候想念 Java8 的 Stream API ..
    - 三方库, 不能说少...但是有些 star 还少, Java 有些大几千上万的放心用, go 可能有些就几百个 star..
    madku
        129
    madku  
       104 天前
    Go 不错,这波站 Rust
    Nazz
        130
    Nazz  
       104 天前
    @lesismal 羡慕了, 你的粉丝真多
    xieren58
        131
    xieren58  
       104 天前
    推荐大家都学 go, 我用 ts/rust/c#/kotlin...
    Subfire
        132
    Subfire  
       104 天前
    引用某乎的一段话:
    3 年前 go 在国内大量增长的时候,有不少业务老大跟风,吭哧吭哧地把 java 的业务重构成 go ,有的业务哪怕现在都还没完全重构完,结果现在 loom 出来了。
    不知道当初那些“架构师”、“CTO”会不会被老板骂死。。。
    cmsyh29
        133
    cmsyh29  
       104 天前
    建议真实写写业务,真实写业务代码一堆 err ,除了协程,在开发角度方面我觉得和 java 还是相差挺大的,无论是语言 生态 还是 ide 的支持
    ryuj
        134
    ryuj  
       104 天前
    每次这种帖子都能看到那熟悉的几个人~~
    lsk569937453
        135
    lsk569937453  
       104 天前
    @sunny352787 饭圈思想来了吗?佩服啊,没有发明轮子的人看来都要被剥夺网上发言权了???
    我没发明冰箱我还不能点评一下冰箱了???
    sunny352787
        136
    sunny352787  
       104 天前
    @lsk569937453 是程序员吗?有逻辑吗?上面说 show me the code ,我说他有 code ,然后你这边开始扣帽子。你才饭圈吧?
    还跟这说冰箱,你要是冰箱用户那你爱怎么点评就怎么点评谁理你,你都是冰箱行业的了不拿出点专业点评空口喷好意思吗?
    sunny352787
        137
    sunny352787  
       104 天前
    @diagnostics 要 code 给你 code ,给完了你跟这阴阳怪气,啥能耐没有就嘴硬。
    lsk569937453
        138
    lsk569937453  
       104 天前
    @sunny352787 你在这里点评 java ,请拿出 java code 来,拿 golang 的项目吹牛逼???
    lsk569937453
        139
    lsk569937453  
       104 天前
    写过 100 行 java 吗?就在这里乱弹琴,请带着你的粉丝去别的论坛吧。弄的乌烟瘴气的
    sunny352787
        140
    sunny352787  
       104 天前
    @lsk569937453

    diagnostics
    #61

    > 所以对我而言,java 这种没有系统编程能力、性能有限、臃肿直到宇宙尽头、非常浪费硬件的“垃圾”


    哥们,求求你了,去把 Flink 重写,中国开源第一人应该就是你了。你知道大数据用多少台机器,都跑在 JVM 下吗?我记得前几年阿里宣传 Fink 的案例好像都是千台服务,你用 Go 重写应该能降到 500 台以下吧?别的不说,达摩院院长你来当


    我反驳的是这个,眼捐?
    diagnostics
        141
    diagnostics  
       104 天前
    @mightybruce #126 Ray 是用来做 ML 的分布式计算的,和 Flink/Spark 还不一样哦。

    另外你说的这几个,是用 Go 写的吗?不是,是 Java 写的吗?不是。那你不是论证了我的观点吗?

    技术和语言无关,和理论、思想有关。

    @sunny352787 #137 懒得和饭圈吵,JavaGuide 多少 k 的 Star ?那技术水平很高吗?我自己写 Java 也写 Scala ,只不过混了个开源基金会的 Committer ,但我觉得不值得一提,甚至拿来这里吵架非常 Low 。

    Show me your code -> 我不需要一个不写 XX 的人,来认可代码水平,我也不会评价别人写的 Go 水平,代码只是思想的另一种体现,至于用什么来 coding ,只是习惯而已
    geniuskyer
        142
    geniuskyer  
       104 天前
    @Morii jdk21 上虚拟线程了吗
    yooomu
        143
    yooomu  
       104 天前
    @veightz 和你的感觉一致,写点小东西很方便,不用折腾一大堆依赖,上来就开写。但特性过于简陋,正经用来干活写业务就是降低自己工作效率。大量的 if err !=nil 会让人越写越烦躁,涉及集合处理更是折磨
    silentsky
        144
    silentsky  
    OP
       104 天前
    其实 java 语言上的设计挺优秀的 可能在云原生这块 对于其跑在 jvm 上并不太满意 如果哪天能把 jvm 去掉 应该会让人更容易接受
    chaleaochexist
        145
    chaleaochexist  
       104 天前
    @Subfire #128 loom 是啥?
    mydev6666666
        146
    mydev6666666  
       104 天前
    自从用了 github coilot ,if err 是啥?都是自动打出来的。所以我现在每一个的 err 都出日志了
    @beneo 只要每一个错误都打上 err 就不会找不到哪一行代码错了
    liprais
        147
    liprais  
       104 天前
    @silentsky 收收味吧,也不看看 golang 那东西啥样
    wangritian
        148
    wangritian  
       104 天前
    交流下每个语言的优缺点就行了,又吵上了
    哪个更好是看用途和场景的,go 很明显跟 java 不在一个赛道
    sunny352787
        149
    sunny352787  
       104 天前
    @diagnostics 这也饭圈那也饭圈,人家论证自己的观点至少写出了比较详细的理由,你就盯着那一句总结开始阴阳怪气,这是讨论问题的态度吗?我也没觉得 golang 有多好,但对于我这种从 C++开始入行的程序来说,java 给我的印象确实就是臃肿不堪性能不足。你觉得 java 不错并且自己有很好的实践经验,那你为什么不直接指出对方的问题而是在那“达摩院院长你来当”,这就是所谓的开源基金会 Committer 的水平吗?
    beneo
        150
    beneo  
       104 天前
    @mydev6666666 我坚持认为 err 设计哲学是一个 很傻逼很傻逼的事情,想法 Java 的 stacktrace 是务必务实的存在;我的问题是说,我是用了一个 gorm 库,出现异常后只有一句 log ,我都没有办法知道是这个库的哪行源码处理问题,就好像 Java 的 stacktrace 一样方便我定位问题。
    QWE321ASD
        151
    QWE321ASD  
       104 天前
    怪不得我进的大杂烩 up 主的 qq 群都喷 go 小鬼,这发言也逆天的太离谱了...
    monmon
        152
    monmon  
       104 天前
    客曰:“年之季其几也?”
    笑答:“四季也。”
    客曰:“三季。”
    遂讨论不止,过午未休。
    子闻声而出,子贡问之,夫子初不答,察然后言:“三季也。”
    客乐而乐也,笑辞夫子。

    https://www.techempower.com/benchmarks/#hw=ph&test=composite&section=data-r22
    securityCoding
        153
    securityCoding  
       104 天前
    @fpk5 #75
    @silentsky #71
    所以这就是问题啊,业务中 nil/并发冲突/三方库随时有坑,go func 是很简单但是实际业务用的心惊胆战不还是得包一层 recover
    vjnjc
        154
    vjnjc  
       104 天前
    golang 的问题是报错了不知道哪一行,需要自己实现
    不像 Java 那样能精确到某一行,哪里报错点哪里
    silentsky
        155
    silentsky  
    OP
       104 天前
    @monmon 前三都是 rust 写的
    diagnostics
        156
    diagnostics  
       104 天前
    @sunny352787 #149

    印象流都来了,性能不好你在什么场景呢?吞吐量有限还是 latency 优先?场景都没有你说性能不好

    假如你说语言执行效率,Java 是没有内联、逃逸分析、常量折叠,还是没有 JIT 啊?说性能不好,起码举出不好的例子,别人说了什么观点?观点就是 Java 程序员不懂底层技术呗,这和语言有啥关系?

    你要说,虚拟机性能就是差,就是不如 AOT ,那 graalvm 是什么?你又要说,Java 没有 Fiber ,性能也不行了,那我也告诉你,quasar 应该在 13 年就实现了 Fiber ,这哥们后来去 Oracle 写虚拟线程去了


    天天秒天秒地,就拿 gRPC 来说,Java 的差距很大吗? https://github.com/LesnyRumcajs/grpc_bench/wiki/2022-04-23-bench-results

    GO 那么吊,连一个快死的 Scala 都干不过
    sunny352787
        157
    sunny352787  
       104 天前
    @diagnostics 你看,抛开行文语气,你也是能讨论具体内容的对吧,那为什么一开始要那样说话呢?

    我对 java 的认知是几年前我维护一款 java 写的游戏服务端产生的,jdk 什么版本已经不记得了,就记得服务器一启动什么都没干呢内存先吃了几个 G ,等待启动很久。而且服务器需要安装很多东西才能把服务跑起来。

    当我可以做主自由选择语言进行开发的时候,首先丢掉了用了好多年的 C++因为写起来对人员要求有点高。
    我的可选目标就是 golang 、rust 、java 、C#、python 、node.js ,而 java 就是因为部署麻烦以及内存占用过多而放弃的。如果是现在让我选的话,结果也可能不一样。

    golang 有很多让我感到不爽的地方类似 error 、泛型等,但运维简单(一个可执行文件即可)、上手容易(我可以随便找个不太笨的毕业生一周左右就可以干活儿)、性能还不错,而且能保证每个人写的代码格式都一样(左大括号不让换行确实挺讨厌但能忍)。
    guoziyan
        158
    guoziyan  
       104 天前
    go 是垃圾
    dc2002007
        159
    dc2002007  
       103 天前
    @diagnostics 基金估值的 IBOR 或量化交易算法,你也未必玩的转。这玩意偏数学,你前边写的都还蛮对味的,这句就有点扯了!
    Morii
        160
    Morii  
       103 天前
    @geniuskyer 上了,并且我们已经在生产环境使用了
    vincent7245
        161
    vincent7245  
       103 天前
    golang 没意思,在玩 rust
    Subfire
        162
    Subfire  
       103 天前
    @chaleaochexist Project Loom
    magicZ
        163
    magicZ  
       103 天前
    一个月前,我发了一个帖子 https://www.v2ex.com/t/1002653#reply12
    根据里面的回答看以及周志明老师的文章看 ( https://jingyecn.top:18080/tricks/2020/java-crisis/qcon.html ),
    Project Leyden,Project Valhalla 还没有突破,但可喜的是 Project Loom 再 21 版本提供了虚拟线程。
    java 目前是存在危机的, 腾讯新闻放弃 PHP 转投 Go ,10 万行代码重构( https://zhuanlan.zhihu.com/p/675879401 )。
    对于一门发展了 25 年的长青语言,希望它发展的更好。
    veightz
        164
    veightz  
       99 天前
    @yooomu 1.18+的话,处理集合可以试试 https://github.com/samber/lo
    lesismal
        165
    lesismal  
       95 天前
    @beneo 跟站长要了封禁,解封后才来回复。如果是自己的代码,自己的日志带文件行号就可以了。如果是三方库,这个没办法直接获取三方 error 堆栈,如果不是本地开发环境只能根据 error 去源码里搜之类的,如果是开发期间 debug 可以调试进去看。
    通常库里不应该抛出异常,因为如果业务层没有 recover 这会导致业务宕机。
    致于 error 堆栈,库自己多 wrap 上堆栈信息的话会性能下降,而且 golang error 也是历史原因了,我前阵子也在琢磨,要不要把自己库里加个配置项、允许用户设置 error wrapper ,然后库里返回的地方都用用户的 wrapper 包装后再返回,这样如果用户想要堆栈、可以自己设置 error wrapper 。但这个改动的工作量也挺大的,而且即使默认只是空的 error wrapper 也会略影响性能,所以我还是倾向于不加这个,尽量保障框架自己稳定、不给用户添麻烦或者不需要用户那么麻烦必须深入到框架内不才能解决。

    golang 的 orm 没有好用的,如果有兴趣,欢迎试试我的 rawsql 方案:
    https://github.com/lesismal/sqlw
    lesismal
        166
    lesismal  
       95 天前
    @diagnostics 淡定下来,咱们不搞语言之争了,各自能解决业务问题就行。

    > 天天秒天秒地,就拿 gRPC 来说,Java 的差距很大吗? https://github.com/LesnyRumcajs/grpc_bench/wiki/2022-04-23-bench-results

    gRPC 本来我也是不支持的,所以我用我自己的 arpc ,易用性、可以支持的业务类型比 gRPC 丰富的多,至于性能,因为 gRPC 非要 HTTP2.0 ,但绝大多数 RPC 都是内网服务之间的调用,所以相比于直接 TCP 的框架,gRPC 性能是比较差的,这里有三方鸟窝老师的对比,可以看下我的 arpc 的数据,还可以,但是当然,go 实现的怎么也干不过 c/cpp/rust 这些的性能,我自己如果写 c/cpp 的版本肯定也能随便灭 go 版本的性能:
    https://colobu.com/2022/07/31/2022-rpc-frameworks-benchmarks/

    > 我自己写 Java 也写 Scala ,只不过混了个开源基金会的 Committer

    只要能被合并,至少都是符合了大项目很多规范的,所以 Committer 挺不错的。但抛开规范之外的技术含量本身,还是要看实际 PR 内容的技术难度,所以也没太大必要拿 Committer 说事,我其他号也给 apache PR 过也合并过的,但不是特别重要的内容,所以我对 apache 贡献也几乎可以忽略。身边也有其他项目的 Commiter 比如 Netty 的,但也是非核心功能

    > 不敢不敢,我没能力,说出来的话,感觉丢其他的脸,拿这个东西来比。

    这个确实没必要,尤其我那个个人小项目,主要都是自己写、图自己方便,项目规范也没搞那么多,连注释文档我都没空好好整理详细,主要精力优先放在保证功能良好稳定和各种兼容上了、尽量让用户用着舒服

    > 哥们,求求你了,去把 Flink 重写,中国开源第一人应该就是你了。你知道大数据用多少台机器,都跑在 JVM 下吗?我记得前几年阿里宣传 Fink 的案例好像都是千台服务,你用 Go 重写应该能降到 500 台以下吧?别的不说,达摩院院长你来当

    平常心平常心,咱别说气话。
    讲真,术业有专攻,大数据基础设施我目前只是用户,没有自己造过。而且大项目耗时费力的,个人用爱发电不划算。但如果兄台有认识的团队想试试搞这些项目优化 java 版本的开销和性能,可以来找我,价钱给到位,个人水平有限不是一定能搞定,但还是可以搞搞试试看的
    lesismal
        167
    lesismal  
       95 天前
    > 脱离你的业务场景去谈我要用什么语言是很无聊的, 除非你是架构师,架构你说算了,或你是技术总监, 技术路线你说了算

    啊这样子啊,那好像没毛病,我们团队技术是我说了算的,而且我确实把旧的 java 项目都用 go 重构了,没了 java 以后,开发和运维大家都很开心,软硬件成本也降了、老板也开心 🤗
    beneo
        168
    beneo  
       95 天前
    @lesismal 所以 go 就是 一个大公司全部自己搞,然后鼓吹 go 多好多好;不能拿着 Java 的生态去憧憬 go 有多好的资源,因为一不小心就是大坑,还救不回来
    lesismal
        169
    lesismal  
       95 天前
    @wanqiangcrack #167 忘记 at 了

    > 脱离你的业务场景去谈我要用什么语言是很无聊的, 除非你是架构师,架构你说算了,或你是技术总监, 技术路线你说了算

    啊这样子啊,那好像没毛病,我们团队技术是我说了算的,而且我确实把旧的 java 项目都用 go 重构了,没了 java 以后,开发和运维大家都很开心,软硬件成本也降了、老板也开心 🤗
    lesismal
        170
    lesismal  
       95 天前
    @beneo
    也不算吧,小公司一样搞啊,别用什么奇葩姿势、别用那些对工程不友好的库(例如 orm 相关的)就可以呀。

    关键是很多人,他们本来熟悉了 java 那套,然后刚刚转到 go 没多久,还非要按照 java 的习惯去找 go 对应的轮子,go 没有就说 go 不行,这是开箱使用姿势不对啊:因为本质上你是做业务实现需求,本质上你应该寻找 go 的能实现需求的轮子,而不是非要找 go 生态里的像 java 的轮子。

    抛开基础设施领域的 A 有 B 没有,对于业务而言,http 足够好用的框架大家都有,堆栈你如果用 gin 、echo 那些加上中间件就可以,logger 挑个三方成熟的就可以,标准库 sql 你写 raw sql 也没问题,但是非要找 go 的 orm 去用然后说 go 不行,这。。。

    还有一类其他语言转 go 的,例如 javaer 、phper 转 go 然后搞一套类似 java 、php 的框架,虽然臃肿了点我个人比较抵触,但是对于原本的 javaer 、phper 确实也方便一点。但是他们的框架可能也依赖了 golang 的一些不好的库比如 orm ,但也不是必须使用它才行,也可以自己 raw sql 的。而且不管怎么说,这些框架它不是 go 本身,也不能因为它不行就说 go 不行吧。毕竟标准库、gin 、echo 也都足够用

    基础姿势没搞明白,然后去使用不好的方案,然后说 go 不行。对不起,这个锅 go 不背

    如果都是初学者,不带着 java 、php 的经验和偏见来学 go 的 gopher ,我还没见过几个喷 go 的,反倒都说 go 容易上手、也不需要依赖太多轮子就能把项目搞得很好
    lesismal
        171
    lesismal  
       95 天前
    @beneo 类似的 go java 好坏的我就不再聊了,免得又浪费时间了。。
    diagnostics
        172
    diagnostics  
       95 天前
    @lesismal #166 也可以继续讨论下去,只要别嘴炮,光说问题不说原因,当个键盘侠。

    以朴素点的语言来说,也不针锋相对,你说 Java 语言性能不如 Go ,我先以你的视角帮你举例:

    从编译实现角度上,Java 非 AOT 编译,而是编译为字节码,需要解释器来解释成机器码,注定其性能较低。

    > 我的回答:Java 最初的目的是为了实现一次编译多次运行,因此在机器码和源代码之前增加了额外的字节码,由解释器来运行,其初始性能确实低于其他 AOT 的语言,不只是 GO ,但相对的 Trade Off 就是,牺牲了初始执行效率,换来了一次编译,不同平台运行;也换来了编译速度的提升。对于操作系统级别的优化(如 IO 实现等)由 JVM 来实现,对于后续的代码执行效率,由 C1 、C2 等 JIT 优化为性能更好机器码;而且 JIT 相对 AOT ,更匹配生产(现实)环境的代码热点(不同流量下的结果可能不同)

    再从编译器对代码的性能优化来举例,例如你可以举例 GO 有,但是 Java 没有,或者某个编译优化技术在 Java 里实现的非常差的,可以尽管举例(例如代码修剪类的 inline )

    JDK 相关的编译器优化技术 Wiki: https://wiki.openjdk.org/display/HotSpot/PerformanceTacticIndex

    最后我再说一句,语言级别的性能讨论,不是放在语言代码和机器码之间的编译器实现,而是去讨论,语言代码和最后行为之间的框架、设计模式、业务实现,完全取决于开发者水平和生态水平的,那我感觉这个讨论,从本质上就已经远离了计算机科学了,我甚至怀疑能发出这个争议的人是否是科班毕业
    wanqiangcrack
        173
    wanqiangcrack  
       94 天前
    @lesismal 额 那,祝你好运。 我一直认为 go 还是 java 之争这种东西在公司内部属于政治路线的斗争。 现在更是深以为然,项目能用 Go 跑就用呗。 反正我是不太推荐用的。 可能我还没遇到必须要用 Go 的场景吧。
    lesismal
        174
    lesismal  
       94 天前
    @diagnostics 我不想再讨论语言本身了

    > 语言级别的性能讨论,不是放在语言代码和机器码之间的编译器实现,而是去讨论,语言代码和最后行为之间的框架、设计模式、业务实现,完全取决于开发者水平和生态水平的

    我这个人比较注重实践,对于技术选型的语言选择,我建议不要只考虑这些理论上的如何如何,多看看实践,从开发到部署维护,从便利性到安全性到开销占用能效比。尤其是,拿实际项目中主要开发人员的普遍情况来对比,不要用一小撮高手才能搞出来的情况去对比普遍业务,因为绝大多数业务是普通业务开发人员搞出来的,例如 GC 算法最牛逼但实践中你不能指望所有人对分代 GC 都了如指掌搞得比 go 这种自动档还好用,Java 有很多不错的方案,但被用到生产实践优化的比例很小。


    @wanqiangcrack 大厂很多 go 重构的,很多人说 go 只在国内火但外用的少,但 go 是谷歌造并且带头用并且云原生领域算是最火了,国内一票独角兽明星企业用 go ,抛开阿里这种传统业务已经重度绑死 Java 技术栈的不好调头,看看 b 栈知乎战略调整到 go 大量用它重构以前其他语言的,最近几年腾讯技术战略上也是转向大量用 go 的。如果你们的业务从没遇到过性能问题、复杂业务逻辑用 Java 不容易搞的问题、Java 安全问题、Java 部署麻烦硬件开销成本高的问题,Java 高手难招而且主要是 web 服务相关、其他业务就难招到高手 Javaer ,等等一系列问题,那对你来说可能确实只是政治路线之争,因为你们的业务不需要对 Java 进行优化。但实际商业中,不只是 web 服务,比如大厂各种云基础设施,各种分布式基础设施,各种不同类型的业务,尤其是商业注重成本收益比效率这些,在大厂海量业务下软硬件成本的放大效应全是钱的问题。Javaer 经常说的一句就是堆机器就行,但规模稍微大点的中型业务就可能上百台节点的集群,能省 30-70%的硬件成本就算不小的持续降本了,更何况大厂的那些基础设施可不只是这点节点数量。至少我在自己工作中和行业里那些选择 go (不一定是全部替换掉 Java 之类的,但很多新业务都努力上 go 、旧的其他语言业务也积极用 go 重构)看到的不是政治路线斗争,而是务实的商业+技术选型,而且我自己的实践中这个选型也确实降本增效(别听那些开箱姿势不对的人说 go 开发效率低,姿势用对了 go 的开发效率真没比 Java 差),而且安全性也更高了(这两年 Java 漏洞有点感人)
    diagnostics
        175
    diagnostics  
       94 天前
    @lesismal #174 挑起语言之争的不是你吗?现在搞得好像我说 Go 垃圾一样,事实上我通篇都没说 Go 怎么样。

    你说的少部分顶尖的人才能搞出来的情况就更搞笑了,有 JIT 压根都不需要你业务代码写得非常好,反而门槛比 Go 低多了,这也是你一开始的结论,Java 开发者普遍不知道底层。

    我不清楚,一个前言不搭后语的人,能力到底有多强
    lesismal
        176
    lesismal  
       94 天前
    @diagnostics 抱歉,我可能前面没把不想继续讨论语言的原因讲清楚,那我解释下吧,我不想再讨论语言的意思是:我不想跟你这种人继续浪费时间,优劣相关我已经讲了很多,因为你只知道吹理论和那些不被大量常规使用的东西来对比,不看实践中的 java 硬件开销、性能、成本来对比,所以我觉得你的水准好像不太够,我不想拉低自己的水准去打这些口水仗

    虽然我不想继续讨论,但是并不代表我反悔自己的观点,这跟前言后语没关系,所以你对我的前言不搭后语的推理也是逻辑有点奇怪了。前言后语搭不搭不那么重要,很多文学作品影视剧也看上去天马行空这一榔头那一斧子,但你理解了之后才发现原来那么有意思。技术的东西实实在在,理论不结合实际、逻辑不及格可不是好事情

    至于能力,我知道自己不算多强,但我估计你的水平可能不足以用来评价我的水平。

    如果不爽我,建议你 block 我好了,这是我最后一次回复你了,我也先 block 你了,免得大过年的浪费彼此时间

    站长推荐的《 In Time 》也建议你看一下
    diagnostics
        177
    diagnostics  
       94 天前
    笑死,嘴炮 java 垃圾,说的确实 Java 不节能,也就是云原生的浪潮下,养活了一批 “Go” 开发者,写了点相关的代码,造了个在 go 上的轮子就洋洋得意了,项目进 CNCF 了吗? Description 写着 High Performance ,连 design principles 都没有,这就是高水平~

    从头到尾,一句有用的反驳都没有,只有嘲讽,这就是国内 Go 开发者啊~
    diagnostics
        178
    diagnostics  
       94 天前
    Go 开发者最爱的两件事:

    - 碰瓷其他语言
    - 造网络轮子

    我在 v2 少说也 6 、7 年,在 v2 发的 Go 轮子,60% 和网络有关,20% 和 Web 后端框架有关,10% 可能是一些分布式协议的实现(例如 mit 624 就是 go 写 raft 吧?)

    国内 Go 开发者其他领域有建树吗?甚至提分布式调度框架,还有人拿 go 代码量几乎为 0 的的 DASK 和 RAY 说事。。。我在想 2k repo 的作者都是这水平,那其他。。。。
    lesismal
        179
    lesismal  
       94 天前
    @lesismal #61
    “这道理就像是,路上看到一坨狗屎,大家得躲着走,总不能要求别人上去尝一口然后才有资格说它臭吧”
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1499 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:49 · PVG 07:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.