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

Javaer 用了一下 Go web 开发,感觉开发体验倒退了

  •  
  •   binbinyouliiii · 122 天前 · 13061 次点击
    这是一个创建于 122 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前一直用的 java 写 crud ,最近有项目要用 Go 写,然后我就用了 Go 尝试写了一个 web 程序

    但是体验下来,其实开发体验并不怎么高,比如脚手架,虽然有很多现成的,但是我更希望有一种规范或者 interface ,就算是 java 多年前的纯 spring+servlet ,也会提供各种 interface 去规范。这样起码可以保证接手或者同时维护的人能够更快的理解和上手。

    开发体验类似写命令行程序,从 main 函数一点点往上加功能,写了一天,看了一天文档,我才把 gin+gorm+zap+viper 配置好,花时间去组合。

    crud 方面就不说了,还是比较原始,或者有什么奇淫巧计我不知道的。

    上面说的几点只是我简单用了几天,感知比较大的几点。

    其实上面说的同样可以放在其他语言上,我也不是对 Go 有什么偏见,而是觉得 GO 这么火,越来越多的互联网公司用来支撑业务,照理来说生态和体验跟其他小众语言不是一个量级的了,但是用起来还是有些失望。

    第 1 条附言  ·  122 天前
    麻烦想说我贬低 go 的人先看看标题和内容,别一看到 java 和 go 就跳脚
    203 条回复    2022-04-14 12:52:17 +08:00
    1  2  3  
    lscho
        1
    lscho  
       122 天前   ❤️ 11
    “虽然有很多现成的,但是我更希望有一种规范或者 interface”

    感觉是写 java 写多的后遗症。
    Hanggi
        2
    Hanggi  
       122 天前   ❤️ 2
    这就是典型的告诉你该怎么做就怎么做,突然放开手脚就不知所措了。

    你依然可以使用 Java 的那套开发模式去写 Go ,就是要理解下 Go interface 的一些特别之处。
    murmur
        3
    murmur  
       122 天前
    这不是 interface 的问题,是 spring 的生态太庞大了,java 的 web 东西稍微凑一下都能凑近 spring 里
    Qseven
        4
    Qseven  
       122 天前   ❤️ 25
    面向过程,流水账,一把梭,十个工程十个样,是不是这感觉?
    binbinyouliiii
        5
    binbinyouliiii  
    OP
       122 天前   ❤️ 1
    @lscho @Hanggi
    这个其实也可以算每个人不同的喜好了,我写过其他项目(前端,kotlin ,Rust )的时候,接手项目的时候,找 Bug 其实就得从头开始看了,非常耗费时间,因为每个人的想法都不一样,随着维护的人越来越多,项目就会杂糅每个人的思想,最后大概率还是会很难维护。
    keepeye
        6
    keepeye  
       122 天前
    继续回去用 java 框架就是了,也不指望你接触几天就能改变思维习惯
    lscho
        7
    lscho  
       122 天前
    @binbinyouliiii 感觉不是不同喜好的问题,是只有 java 有这种大一统的框架,学 java 的人都会这个,所以换个人可以快速接受。别的语言没有这种大一统的框架,用什么的都有,所以看上去比较乱。

    其实好不好维护看是看文档的,如果 golang 项目写的比较规范,同时文档齐全,换个人也可以很快理解上手。
    Mark3K
        8
    Mark3K  
       122 天前
    那是因为你项目太小了,仅包括一些 CRUD ,打点的项目中 CRUD 和 HTTP 接口只是其中很小一块
    Mark3K
        9
    Mark3K  
       122 天前   ❤️ 1
    echo1937
        10
    echo1937  
       122 天前
    @lscho #6 别的语言照样有啊,Python Django ,Ruby on Rails ,PHP Laravel
    liuxu
        11
    liuxu  
       122 天前
    你写过 rust ,但是你觉得 go web 开发体验倒退了? rust 什么项目发出来我看看
    anzu
        12
    anzu  
       122 天前
    可能其它公司关注的不是开发体验
    binbinyouliiii
        13
    binbinyouliiii  
    OP
       122 天前   ❤️ 2
    @liuxu #11 见我最后一句话,现在人戾气这么重?
    chevalier
        14
    chevalier  
       122 天前   ❤️ 16
    Javaer ? ❌
    Springer ✅
    binbinyouliiii
        15
    binbinyouliiii  
    OP
       122 天前
    @Mark3K #8 emm...我觉得业务逻辑用什么语言写都差不多,不知道你说的大项目指什么
    wonderfulcxm
        16
    wonderfulcxm  
       122 天前 via iPhone
    正常,当你对一种新语言了解不够,本能的用熟悉的语言去套。很多人夸口一周甚至更短时间掌握一门语言,事实上掌握的只是语法。思维还没转过来,只会写出像 Java 一样的 go 代码,像 js 一样的 PHP 代码。
    要多久才能掌握一门语言,有个我订阅的 YouTuber 说,至少用这门语言做五个不同项目。而且不是 hello world 级别的。
    NoDocCat
        17
    NoDocCat  
       122 天前   ❤️ 2
    请尝试说服自己: 大道至简.
    如果你没有说服, 说明你不是目标用户
    ytmsdy
        18
    ytmsdy  
       122 天前   ❤️ 3
    java 最大的优势是规范,就算写的人水平再参差不齐,写出来的代码,不会太飘逸。大企业,大团队用这玩意儿确实有优势。毕竟顺利完成项目,并且项目可维护才是最重要的。
    Go ,Python 这一类动态语言,就很考验写代码人的水平,以及写代码人的自律规范。代码飘逸起来,各种花式语法,后续维护,以及优化是一个很大的问题。但是重点是快,小团队,个人开发者用这玩意儿挺好。毕竟对个人开发者来说,效率是第一的!
    monkeyWie
        19
    monkeyWie  
       122 天前   ❤️ 6
    go 写业务代码就是难受,楼上一堆解释原因的真的是不是没写过复杂业务,但凡用过 java springboot 都知道 go 写业务多恶心吧,我自己也用 go 但是只写网络相关的东西,这才是 go 的方向
    binbinyouliiii
        20
    binbinyouliiii  
    OP
       122 天前
    @wonderfulcxm #16 其实我初上手一个新语言 web 项目,我更想知道最佳实践是什么,因为这个项目不光是我一个人维护,现在看起来很多 Go web 不同项目都有自己不同的风格。
    mosfet
        21
    mosfet  
       122 天前
    搞嵌入式 C 的
    现在尝试一些跑 linux 上的服务用 go 写,毫无违和感...
    jelipo
        22
    jelipo  
       122 天前 via Android
    @mosfet 楼主说的是 web
    xgfan
        23
    xgfan  
       122 天前   ❤️ 3
    Golang 写业务 /CRUD 就是不行。

    1 ,没有泛型就没有好的集合类。
    2 ,再加上很多函数都要 return err ,导致很难把一串操作给连起来。
    wanguorui123
        24
    wanguorui123  
       122 天前
    自己造个 Go 的轮子就好了
    ren2881971
        25
    ren2881971  
       122 天前   ❤️ 1
    Go 的隐式实现、隐式继承真的是对初学者一点不友好。。。 写 java 出身的,想完全看懂一个 go 的开源项目真的好难。。。。
    huiyifyj
        26
    huiyifyj  
       122 天前
    javaer 吐槽 go 月经贴
    Jooooooooo
        27
    Jooooooooo  
       122 天前   ❤️ 4
    我感觉 java 上 web 开发已经真正做到只用关心业务逻辑, 框架层面极少关心.


    (这才是真正好用的语言啊
    iyear
        28
    iyear  
       122 天前 via Android   ❤️ 1
    我很喜欢 go ,但是 go 写业务是真的麻烦,这点真的得承认,我自己写的很烦。
    但是写中间件和各种网络工具,分发是真的爽
    swim2sun
        29
    swim2sun  
       122 天前
    其实你是习惯了 Spring 帮你抽象好的那些概念,controller, service, repository...
    于是当你需要自己去抽象一些东西的时候你才会这么无所适从,go 应该也有一些框架帮你抽象好了很多东西,但你需要投入时间去理解
    sagaxu
        30
    sagaxu  
       122 天前 via Android   ❤️ 1
    大道至简,写的不舒服,一定是需求提的不好,不够优雅
    zhangchongjie
        31
    zhangchongjie  
       122 天前
    @Jooooooooo java web 方面的生态基本上都是现成的了,现在的集成框架基本业务 都不怎么写了
    binbinyouliiii
        32
    binbinyouliiii  
    OP
       122 天前   ❤️ 2
    @swim2sun #29 这些分层不是 spring 的概念,是 web 的概念,只是在 java web 上大家都遵循这个分层
    liuxu
        33
    liuxu  
       122 天前
    @binbinyouliiii 现在的人发帖都这么带有偏见?喜欢带节奏?
    binbinyouliiii
        34
    binbinyouliiii  
    OP
       122 天前   ❤️ 4
    @liuxu #33 我只是作为 javer ,实际用 Go 的感觉,到你这就是带节奏?难道不是你见不得别说 Go 一丁点不好?
    theodoreshuai
        35
    theodoreshuai  
       122 天前   ❤️ 6
    为什么我感觉评论区战火纷飞


    ┬┴┬┌─ ●─┬─  │─┼─┐ ●├─┤○
    ┴┬┴├┬ ┌─┼─ │◎ │ │ ○└┬┘●
    ─┼─││ │ │  ││─┴─┴ ──┼──
    ●│○││ ┴─┼─  │○  ● / │ \
    binbinyouliiii
        36
    binbinyouliiii  
    OP
       122 天前
    @theodoreshuai #35 大家都会对自己最熟悉的语言下意识的维护,我也写过其他语言,我能理解现在的流行语言都有自己的流行场景,而且我说的都没有跟语言特性相关的,都是 web 生态和开发体验。

    目前 Go 的场景明显是跟 Java 有很大重合的,既然场景有重合那我对比也没有问题。
    SenLief
        37
    SenLief  
       122 天前   ❤️ 1
    其实你换个思想,如果 java 不让你用 spring ,而是让你自己实现,你还会不会觉得 java 更容易?
    go 目前就是万花筒,没有什么是统一的,所以实现上也是千奇百怪,哎。
    offswitch
        38
    offswitch  
       122 天前   ❤️ 2
    Go 反正我不觉得开发效率高,tmd 一堆 if err := ; err != nil ,就很反人类了
    binbinyouliiii
        39
    binbinyouliiii  
    OP
       122 天前
    @SenLief #37 你说的我知道,所以我说其他小众语言也一样,我是以 Go 目前火热程度和生态丰富性做前提,来比较的。
    binbinyouliiii
        40
    binbinyouliiii  
    OP
       122 天前
    @offswitch #38 我觉得 Rust 的“?”的设计可以放在这上面,但是好像大家并不感冒?
    leafre
        41
    leafre  
       122 天前   ❤️ 25
    楼主说的很客观,结果下面一堆 GOer 戾气
    SenLief
        42
    SenLief  
       122 天前   ❤️ 1
    @binbinyouliiii 是啊,写的如果没有标注好的文档,看都看不懂。这点还不如 python 。至少 django 还能一把梭。
    gouflv
        43
    gouflv  
       122 天前 via iPhone   ❤️ 1
    当年拿 express 硬写 crud 的时候,也是这种情况
    sampeng
        44
    sampeng  
       122 天前
    rust 的?的设计在层次深了之后也蛮讨厌。。。每格错误类都要做类型转换
    ragnaroks
        45
    ragnaroks  
       122 天前
    spring 比较完善导致了你的错觉,这个其实就类比于有人只会写 "VUE" 不会 javascript
    fenglangjuxu
        46
    fenglangjuxu  
       122 天前
    虽然 我不懂 java 但是你说的对 golang 有点像积木 被人搭建出各种各样的 模型
    ClarkAbe
        47
    ClarkAbe  
       122 天前
    讲道理一般写 golang 除了某些要多种未知类型输入和返回的场景会用 interface.......crud 谁用了 interface 而不是 struct 定义和约束的话内心骂死他........而且并不是一定得在 main 函数上加.....init()了解一下
    binbinyouliiii
        48
    binbinyouliiii  
    OP
       122 天前
    @sampeng #44 "目前一般认为对于应用程序推荐使用 anyhow ,而对于库推荐使用 thiserror",Rust 一般用这两个
    wizzer
        49
    wizzer  
       122 天前
    https://budwk.com 值得一试~
    cmdOptionKana
        50
    cmdOptionKana  
       122 天前
    如果已经熟悉了 Java ,再转过来用 Go ,那自然各种不顺。

    但是,如果完全零基础的两个人,学 Go 上手应该会比学 Java 轻松一点。
    binbinyouliiii
        51
    binbinyouliiii  
    OP
       122 天前   ❤️ 5
    @ragnaroks #45 我觉得 Spring 的出现是必然的,没有 Spring 也会有叫 Summer 的框架,很多人嫌 Java 穷设计贼多,我觉得人只要一多,必须要有限制和设计来规范,我开始也是嫌烦,但是代码写多了,就能理解为什么会出现这么多设计,Spring 只是其中一种,Java WEB 目前的路都是前人一步步走出来的,我觉得没有任何问题。

    说到正题,早些年刚学 Java WEB 的时候,其实人均手操 servlet ,不比现在的 Go 简单多少。
    sampeng
        52
    sampeng  
       122 天前
    @binbinyouliiii 没错。是解决了转换的问题。但在代码的语意上发生了太多变化。其实这个设计本身倒没什么问题。我理解这样设计的原因是 rust 要求在于,请设计好自己的 Error 层次。其实看一些优秀开源代码,是都是自己设计好 Error 。。。
    sampeng
        53
    sampeng  
       122 天前   ❤️ 1
    我其实个人更倾向于 rust 要比 golang 更适合 web 开发。工程性要比 golang 强。1 年前写的 rust 。现在再去看是看得懂的。golang ? what the fuck ,这个逻辑是干啥,那个逻辑头和尾在哪。。。
    sampeng
        54
    sampeng  
       122 天前
    @binbinyouliiii 说到正题。。现在的 jave 开发不如说是 spring 开发。。。这是一个很矛盾的事。我倒觉得无所谓,业务要用什么就用什么。反正自己每有决定用什么语言的权利
    potatowish
        55
    potatowish  
       122 天前 via iPhone
    已经是 java 的形状了
    liuxu
        56
    liuxu  
       122 天前
    @binbinyouliiii 你拿 spring 对比 gin ,gin 的设计理念就是保证轻量原始,让 go web 框架更 golang ,而不是像别的语言,然后你得出 go web 体验倒退了

    我建议你手写 servlet jsp 和 gin 对比,再得出 java 和 golang 哪个更适合 web 开发
    liuxu
        57
    liuxu  
       122 天前
    而且你这个标题“Javaer 用了一下 Go web 开发,感觉开发体验倒退了”,就是带 java 和 golang 的节奏,非常明确
    binbinyouliiii
        58
    binbinyouliiii  
    OP
       122 天前   ❤️ 1
    @liuxu #57 哦?那您认为怎么起标题能够表达出我的意思且不算带节奏呢?
    QAO
        59
    QAO  
       122 天前
    你自己都说“就算是 java 多年前的纯 spring+servlet ,也会提供各种 interface 去规范”了,哪种语言都可以有或者没有“规范”,只是你适应了 java 那套而已

    楼上说了很多 java 和 go 的对比,我基本都认同,特别是开发业务代码的效率,但都不是你这种情况呀

    承认是因为自己没法短时间从旧思维跳出来就这么难吗?
    binbinyouliiii
        60
    binbinyouliiii  
    OP
       122 天前   ❤️ 1
    @liuxu #56 那你可以告诉我可以媲美 Java web 生态的 Go web 组件嘛?我本身就要用,你要是反驳我,建议拿出可以提升我所谓的“开发体验”的产品出来。
    binbinyouliiii
        61
    binbinyouliiii  
    OP
       122 天前
    @QAO #59 我早些年是从 Java 裸 Servlet+JDBC 过来的,你有没有想过我为什么要说“体验倒退”吗?
    liuxu
        62
    liuxu  
       122 天前
    @binbinyouliiii 我只教儿子,你真的想让我教你么
    x940727
        63
    x940727  
       122 天前   ❤️ 1
    为什么那么多人就是不能承认 Go 写 Web 、写业务就是不如 Java 呢?从脚手架完善程度,生态,可参考项目,到后期项目的维护性,代码的可读性,哪个方面 Go 能比得上 Java ?
    liuxu
        64
    liuxu  
       122 天前
    媲美 Java web 本身就是个伪命题,非要用 java 思维写 golang
    binbinyouliiii
        65
    binbinyouliiii  
    OP
       122 天前   ❤️ 23
    @liuxu #62 素质极差
    Marmot
        66
    Marmot  
       122 天前
    当你手里拿着一个锤子的时候,看谁都像钉子。
    svt
        67
    svt  
       122 天前
    干!干!干!干就完了
    x940727
        68
    x940727  
       122 天前   ❤️ 10
    @binbinyouliiii 和那种低水平低素质的人没必要讨论,讨论技术问题都要认爹,可想他当儿子当的有多憋屈。
    banmuyutian
        69
    banmuyutian  
       122 天前   ❤️ 1
    "Less is more."Goland 是 more 在哪呢,真心求教
    XiLingHost
        70
    XiLingHost  
       122 天前
    建议根据需求选语言,而不是一个语言到处用,不同的语言肯定有不同的优势,不然何必搞出这么多不同的语言呢
    binbinyouliiii
        71
    binbinyouliiii  
    OP
       122 天前
    @XiLingHost #70 《领导的爱好》
    liuxu
        72
    liuxu  
       122 天前
    @x940727 除了生态是和代码贡献人数有关,其他的维护性可读性都和软件工程设计问题,和语言一点关系都没有,就算是 ffmpeg 、linux kernel 这种项目,只要设计好了阅读起来一点问题都没有,不会真的有人觉得多了点 err :=就不可读了吧

    “孩子看什么都不顺眼,多半是要打了”
    Immortal
        73
    Immortal  
       122 天前
    lz 可以看下 kratos 和 go-zero 这些框架,可能更符合你之前的习惯
    cloud107202
        74
    cloud107202  
       122 天前   ❤️ 12
    看多了各种语言爱好者的争论,唯独 go 语言的偏执狂热粉比例很异常。随便一个涉及到 go 的讨论帖都有扑面而来的 go 里 go 气

    难道是 go 的某个语法特质或社区的某种气质会聚集这样的人?
    linzhipeng
        75
    linzhipeng  
       122 天前
    不知道我有没有理解对,就是新接触一个技术,希望有一份最佳实践能摆出来,就可以按照这份最佳实践去开发,然后进一步去学习这份最佳实践涉及到的东西,而不是在入门后,从网上搜一大堆解决方案,最后自己总结出一个最佳实践。
    x940727
        76
    x940727  
       122 天前   ❤️ 3
    其实什么语言,发展到大型项目,其实在规范上都大差不差。Go 语言的 kubernetes 自己去看看,和 Java 的大型项目有啥区别(比如 Hadoop ,Flink 之流)?
    LoNeFong
        77
    LoNeFong  
       122 天前
    @x940727 月经贴, 习惯就好, 每个月都有人要来引战一下
    x940727
        78
    x940727  
       122 天前   ❤️ 2
    @liuxu 当然有关系,泛型,继承,重载,重写都是可以提高维护性和可读性的东西,但是相反的也对开发人员有了更高的要求,你语法缺失这些东西,就等于在某些场景下去需要做更多的代码判断,自然而然的会提高阅读难度。这很难理解吗?
    ychost
        79
    ychost  
       122 天前   ❤️ 1
    个人比较喜欢 js KOA 那一套约定,用起来很灵活且扩展性极强
    nash
        80
    nash  
       122 天前
    为什么一定要对比语言呢,每种语言都有它自己的生态发展规律,有自己的市场需求场景,就像古代侠客,喜欢用什么武器就用什么武器,不能因为你有刀谱(sprint)有宝刀(java)就去否认剑(golang),还是提高自身的内功比较重要,不然不管是刀还是剑终究都是一块铁
    x940727
        81
    x940727  
       122 天前   ❤️ 2
    @nash 楼主并不是否认 Go 存在的意义,而是说在 Web 开发过程中有很多地方不如 Java 方便,如果有 Gopher 知道有什么脚手架能堪比 Spring ,大可以提出来让楼主去用就完了。
    binbinyouliiii
        82
    binbinyouliiii  
    OP
       122 天前
    @nash #80 我没有提过 Go 的语言不行,我标题特指了 web ,也说明了现在 Go 的火热和生态丰富
    HiShan
        83
    HiShan  
       122 天前   ❤️ 1
    Java 的 Spring 确实 完爆目前所有的 Web 框架。Go 里面也有仿的 Spring ,项目是:[Go-Spring]( https://github.com/go-spring/go-spring)
    nash
        84
    nash  
       122 天前   ❤️ 1
    @binbinyouliiii 很多公司并不是拿 go 直接去写 web ,而是做一些中间件,go 目前的生态是不行,java 写 web 的生态已经无敌了,对比也没意义的,既然市场有需求还是有它的价值和闪光点的,生态的完善也不是一朝一夕的,spring 生态也是多少开发者 20 几年建设出来的,如果看好 go 就去参与它生态的建设,如果不喜欢继续深入 java ,个人取舍了,个人意见,不喜勿喷
    fregie
        85
    fregie  
       122 天前
    本身就不是面向对象的语言,非拿来 CURD ,体验肯定好不到哪去
    dqzcwxb
        86
    dqzcwxb  
       122 天前
    @cloud107202 加入我 go 教当一个忠心教徒吧
    liprais
        87
    liprais  
       122 天前   ❤️ 2
    golang 都十来年还生态不行,就是不愿意承认不好用呗
    iyear
        88
    iyear  
       122 天前
    go 写业务很麻烦,但是你这喷的不在点上,gin 和 spring 也不是一个体量的框架呃。。该喷的是 go 没有 spring 这样大一统的框架,生态还是不行
    nash
        89
    nash  
       122 天前
    @x940727 什么语言什么框架能堪比 spring?
    binbinyouliiii
        90
    binbinyouliiii  
    OP
       122 天前
    @nash #84 虽然但是,一般主 go 公司不可能只写中间件啊,字节和 B 站的 crud 肯定大部分也是 go 写的
    nash
        91
    nash  
       122 天前
    @binbinyouliiii 那你就想想为什么他们不用 java 呢,既然 go 那么难用?
    binbinyouliiii
        92
    binbinyouliiii  
    OP
       122 天前
    @nash #91 这还用问为什么?因为技术 leader 的选型喜好啊。

    我什么时候说 Go 难用了?
    nash
        93
    nash  
       122 天前
    @binbinyouliiii 是体验不好,再说又要开战了
    si1enceneo
        94
    si1enceneo  
       122 天前   ❤️ 1
    楼主对比的本来就是业务,CRUD ,这方面 go 确实没 java 好用 ,为啥不愿意承认呢
    x940727
        95
    x940727  
       122 天前
    @nash Python 的 Django 勉勉强强可以在基本功能上比一下,如果论扩展性和支持生态的话,那 Spring 真的是独孤求败了,那是几万顶级 Java 程序员十几二十年的贡献。
    www5070504
        96
    www5070504  
       122 天前
    不明白为啥这么多 web 要用 go 感觉 go 的主场不是在其他方向么 比如网络 中间件 之类的
    nash
        97
    nash  
       122 天前
    @si1enceneo 如果 CRUD ,别说对比 spring 了,对比 laravel 还差一大截呢
    binbinyouliiii
        98
    binbinyouliiii  
    OP
       122 天前
    @nash #93 我同样可以找出不选 java 选 pyhton 的,“为什么他们选 python 不选 java 呢”
    liian2019
        99
    liian2019  
       122 天前
    每种语言都有擅长的方向
    liuxu
        100
    liuxu  
       122 天前   ❤️ 1
    @nash
    @HiShan

    如果只讲 web 框架的话,laravel 可以一战

    spring 对比 laravel ,一种手摇拖拉机对比特斯拉的感觉,即使你 springboot 来了也不行
    1  2  3  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3342 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 136ms · UTC 01:08 · PVG 09:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.