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

Go 语言选手学写 Java SpringCloud 一周的体会

  •  
  •   Nitroethane · 2023-07-28 21:03:07 +08:00 · 2820 次点击
    这是一个创建于 419 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我组目前的技术栈是 Go + Python + C++,人数在十人以下。本人只在上大学时学过一段时间 Java 和 SpringBoot (不超过一个月)。
    因为业务需要,需要把老项目中的一个功能独立出来做成微服务。老项目是用 Python 2 写的屎山,没有微服务一说。
    这个功能很简单,目前主要有以下几点:

    • 接收客户端发送的数据,简单处理之后发送到 Kafka 中。数据量比较大,而且该功能要独立出来,所以计划用 gRPC 协议实现,且计划后续其它功能在此基础上开发。
    • 服务端给客户端实时推送配置。这个功能计划用 consul 或者 etcd 实现,每个客户端 watch 自己的 key ,value 有变动之后自动获取最新配置数据。
    • 实时监控客户端的连接状态,如果有客户端掉线,需要发送告警信息。
    • 后续还会有数据处理和数据打点相关的需求。

    因为涉及到微服务,就想到 SpringCloud 挺有名的,花了一天时间了解了下。然后觉得不错,用了三天实现了第一个需求。用 SpringCloud 的感觉真爽,比如第一个功能,只需要写一个类,就把客户端发来的数据处理后写到 Kafka 里;再写一个类实现 gRPC server ,通过 Spring 的依赖注入把前面的数据处理类注入到 gRPC server 中,就完事了。如果用 Go 写,操作 Kafka 得写一大坨,实现 gRPC Server 得写一大坨,读取配置文件得写一大坨。不仅写起来繁琐,而且还要考虑使用的三方库有没有问题,是否经常维护。
    当然不可否认的是后续会踩到一些坑。

    但是今天下午老板告诉我说 Java 不符合当前技术栈,还是用 Go 写比较好。虽然大概率得用 Go 重写,但下周我还是想再争取一下。

    另外求各位 V 友推荐下 Go 语言中是否有类似 SpringCloud 这种比较全能的微服务框架,如果老板不同意的话得用 Go 重写了。

    请不要评论「老板说什么就是什么」、「折腾这么多干嘛」之类,因为我组不存在这些问题。

    23 条回复    2023-08-09 02:05:57 +08:00
    putaozhenhaochi
        1
    putaozhenhaochi  
       2023-07-28 21:07:33 +08:00 via Android
    goframe 好像走的这种路线
    lanlanye
        2
    lanlanye  
       2023-07-28 21:34:15 +08:00
    都微服务了,要不整个 k8s 吧……也算 Go 技术栈,后面你说的这些需求甚至可能不怎么需要写代码就能解决了。
    Nitroethane
        3
    Nitroethane  
    OP
       2023-07-28 21:50:42 +08:00
    @lanlanye 只要是我经手的项目都上 k8s ,所以这个功能做出来后肯定上 k8s 。而且我计划用微服务架构,慢慢把老项目的功能往过来迁。因为人手少,原来的老项目目前不太可能进行优化,虽然有很多问题。这个老项目也不可能上 k8s ,因为负责这个老项目的老前辈不喜欢折腾 k8s 这种东西 🙈
    lasuar
        4
    lasuar  
       2023-07-28 22:01:46 +08:00   ❤️ 1
    go 框架多了,现在挺多人用 go-zero 微服务框架
    BBCCBB
        5
    BBCCBB  
       2023-07-29 00:17:41 +08:00
    go 写业务代码真的一坨.
    byene
        6
    byene  
       2023-07-29 00:25:37 +08:00   ❤️ 1
    kitex 吧
    JustSong
        7
    JustSong  
       2023-07-29 00:43:35 +08:00 via Android   ❤️ 1
    kitex ?字节内部也在用
    Nitroethane
        8
    Nitroethane  
    OP
       2023-07-29 07:36:34 +08:00
    @BBCCBB 真的是一坨,写了 Java 之后就受不了 Go 了
    Jrue0011
        9
    Jrue0011  
       2023-07-29 10:26:33 +08:00
    说起来字节不是还有个 hertz 框架吗
    JustSong
        10
    JustSong  
       2023-07-29 10:46:06 +08:00 via Android
    @Jrue0011 这个是 web 框架
    zetaochen
        11
    zetaochen  
       2023-07-29 11:38:25 +08:00
    @lanlanye 楼主不是在问代码框架吗..跟 k8 有毛关系
    morebuff
        12
    morebuff  
       2023-07-29 13:07:43 +08:00
    @Nitroethane 我就是 Java 转 go 的,Java 写业务很好,就是很多过度封装,很臃肿
    xubeiyou
        13
    xubeiyou  
       2023-07-29 13:57:45 +08:00
    java 写业务还是很舒服的- -毕竟生态好 很多冗余封装了
    jjx
        14
    jjx  
       2023-07-29 14:35:08 +08:00
    想法不同

    用 go/python 都是想控制每个过程 java 则是在隐藏每个过程
    jsboy
        15
    jsboy  
       2023-07-29 15:08:22 +08:00
    哈哈,我一个 java 程序员,最近在学习 go
    cdx
        16
    cdx  
       2023-07-29 15:51:25 +08:00
    我公司使用 kratos 和 consul 实现微服务,使用起来感觉也还行
    angryfish
        17
    angryfish  
       2023-07-29 17:45:30 +08:00
    go 更适合写中间件吧,写业务代码感觉好难受。
    Nitroethane
        18
    Nitroethane  
    OP
       2023-07-29 19:18:38 +08:00
    @angryfish 同意,写了一些业务代码,越写越难受

    @cdx 感觉这些框架的生态还不是很完善,怕踩到很多坑😂

    @jsboy 客户端我还是用 Go 写,只是打算把后端改成 Java 。祝你学习顺利😂

    @jjx 就是觉得有些过程可以隐藏,没必要每次都重复

    @xubeiyou @morebuff 就是看中了生态好这一点😂
    hzzhzzdogee
        19
    hzzhzzdogee  
       2023-07-29 21:28:54 +08:00
    没有, 楼上说的 goframe, kratos 这些都达不到你想要的效果
    acctv2
        20
    acctv2  
       2023-07-30 10:31:50 +08:00 via Android
    我觉得 go 的大规模项目的组织能力和 Python 一个量级,规模上去了就恶心
    gyt95
        21
    gyt95  
       2023-08-03 00:18:43 +08:00
    不是都说 Go 大道至简吗?想起我们公司后端用 Go ,他们都还挺看不起 Java 那一套的
    Nitroethane
        22
    Nitroethane  
    OP
       2023-08-04 20:39:27 +08:00
    @gyt95 是大道至简,简得什么东西全都得自己从头写,写烦了😅

    @acctv2 非常同意

    @hzzhzzdogee 是的,没办法了,只能用 Go 写了😠
    voidmnwzp
        23
    voidmnwzp  
       2023-08-09 02:05:57 +08:00 via iPhone
    1.Java 基本上==Spring ,至少在目前的工业体系上是的,也就是说 Java 基本只能干 web 的活,要用 nio 还要学复杂的 netty ,go 直接一个 net 库搞定,而且还能做网络编程写写 proxy 、tunnel 很方便
    2.你说的注解方便那都是靠 spring 和 Java 强大的反射功劳,但代价是 runtime 必须靠 jvm ,无法像 go 一样编译一个二进制文件丢到服务器上就能跑,而且越写越多 maven 也会让你抓狂,只能说 spring 是 Java 的大救星,要不你看看 Javaee 的 servlet 那真是鬼见愁,我保证如果你用原生 servlet 去写,那你一定会无比想念 go 的时光,可以对标下 net/http
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4626 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:10 · PVG 09:10 · LAX 18:10 · JFK 21:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.