Java 转 Go 后,我发现自己进了典型误区了? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
5261
V2EX    程序员

Java 转 Go 后,我发现自己进了典型误区了?

  •  
  •   5261 15 天前 416 次点击
    网上看到一篇文章描述 Java 转 Go 的最大误区,我发现自己目前的代码结构和方案就真有这味了

    一个典型误区。
    Go 的微服务根本不走「框架驱动」路线。

    Spring Cloud 的逻辑是:
    把“平台能力”封装进框架

    而 Go 的逻辑是:
    把“平台能力”交给云原生基础设施

    也就是说:
    服务注册 → Kubernetes Service
    配置中心 → ConfigMap / Secret
    熔断限流 → Gateway / Service Mesh
    观测追踪 → OpenTelemetry

    Go 微服务的核心不是“找框架”,而是“用平台”。

    然后让 gpt 分析一顿后,给出 Go 的正确姿势

    如果你现在要真正搭一套 Go + K8s 微服务,最小组合是:

    Go:net/http 或 grpc

    容器:Docker

    编排:Kubernetes

    入口:Ingress-Nginx / Envoy

    配置:ConfigMap / Secret

    观测:OpenTelemetry

    发布:Deployment


    有没有 Go 达人给分析分析,GPT 的分析对不对

    一句真正“到位”的总结

    Spring Cloud:
    把分布式复杂度“封装进代码”

    Go + 云原生:
    把分布式复杂度“移出代码”
    guyeu
        1
    guyeu  
       15 天前
    我觉得这俩思路和语言关系不是很大。
    golang 因为比较新,它出来的时候 Kubernetes 就是微服务的事实标准,服务网格也方兴未艾,所以很多工具直接就走这一套,其实现在用 golang 写的注册中心、配置中心也不老少。
    Java/Spring 太古老了,几乎能在里面找到历史上所有微服务解决方案的影子,搞到今天这个地步,复杂度我觉得是已经到了离谱的程度,有识之士基本上都在另起炉灶( micronaut quarkus helidon, etc )。

    对有靠谱运维且技术栈较新的团队,还是别用 spring 那套了。
    5261
        2
    5261  
    OP
       15 天前
    @guyeu Kubernetes 我不是很懂,不过 Java 那套确实很笨重了,尤其是微服务的话一般企业真心负担不起这 it 服务费
    guyeu
        3
    guyeu  
       15 天前
    @5261 那我就直接点,你列的这堆 AI 写的东西,不是 golang 和 java 语言的差异,更不是 golang 比 java 更优的地方,充其量是典型 Google 技术栈和典型 Spring 技术栈的差异,而且这段东西暗示的 golang 更优这件事情是不存在的。

    你不是很懂 Kubernetes ?你列的 golang 这堆平台能力就没有哪了是能离得了 Kubernetes 的,你不懂 Kubernetes 咋用它们?就“云原生”“用平台”听起来很帅气?一点成本都没有的吗?

    自己不懂 Kubernetes 也没有靠谱的运维团队帮你玩转这一套,就“用平台”,“移出代码”?
    有运维提供平台能力,spring 这一套确实臃肿不堪,但是 Java 生态那么多框架,为啥指着 spring 的不足就要转 golang 呢?

    ---

    golang 简洁无糖的语法,天然的协程支持,简洁好用的并发同步机制( channel ),极小的运行时,某种程度上更优的跨平台能力这些东西你不夸,还你写的代码有这味,咋的你能把平台能力封装进 golang 的框架呗
    5261
        4
    5261  
    OP
       14 天前
    @guyeu 也就是说 然后 真要玩转 go,那就还是得结合 k8s 的平台能力 才能更好的玩转 go 呗!
    guyeu
        5
    guyeu  
       14 天前
    @5261 我的观点是要用 golang 写上规模的微服务,是必须结合 k8s 的平台能力,这不是优点,是 golang 语言生态的缺失,当然这个路子很多公司在走,也很顺畅。

    golang 还可以用来写单体服务,写客户端应用,甚至写游戏,这个语言绝对是一个设计优秀的语言,没有 k8s 也能用它做很多事情。
    5261
        span class="no">6
    5261  
    OP
       14 天前
    @guyeu 你这么说我就懂了, 再请教下 如果 go 项目中 引入 fx 这样的 di 框架应该也不会说太 spring 那味吧
    guyeu
        7
    guyeu  
       13 天前   1
    @5261 不会。

    golang 程序员经常吐槽的 spring/java 味通常是指冗长低效的逻辑嵌套,比如封装 Accessor Methods ,堆叠套用各种工厂模式,还有屁大点事都要 New 一个对象。
    这些是代码里的坏味道,但这是程序员的问题,不是面向对象的问题,假如有人看到面向对象的东西,就说这是 java 味,那是这个人的问题,不是代码的问题。
    使用 fx 这样的 DI 框架,你首先就需要接受面向对象这个编程范式,这是个好东西,绝对可以帮你们消除混乱的全局状态,管理好应用的生命周期。
    如果你们团队里有比较好的 Java 积累,我估计你们大概率确实会在 golang 里复刻一些在 java 里很常见的设计模式,这可以说是 spring 味或者 java 味,我觉得不是坏事,用 golang 的语法大概率可以写出更地道的代码,但能被大家理解,能解决问题,足够稳定的代码就已经是好代码了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5675 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:05 PVG 11:05 LAX 19:05 JFK 22:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86