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

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

  •  
  •   binbinyouliiii · 2022-01-21 14:10:48 +08:00 · 20656 次点击
    这是一个创建于 1039 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    第 1 条附言  ·  2022-01-21 17:56:16 +08:00
    麻烦想说我贬低 go 的人先看看标题和内容,别一看到 java 和 go 就跳脚
    204 条回复    2022-11-30 14:06:18 +08:00
    1  2  3  
    liuxu
        101
    liuxu  
       2022-01-21 18:46:33 +08:00
    @liuxu 据说隔壁 ruby on rails 也对 spring 嗤之以鼻,但是我没用过
    herozzm
        102
    herozzm  
       2022-01-21 18:46:40 +08:00
    @liuxu php 根本不在一个量级,就算有框架
    liuxu
        103
    liuxu  
       2022-01-21 18:50:45 +08:00   ❤️ 1
    @herozzm php 不在一个量级,谁给你的自信
    dcsuibian
        104
    dcsuibian  
       2022-01-21 18:55:04 +08:00
    没有用过 go ,稍微尝试过 nodejs 和 python 的 web 框架。
    真的不能和 java 的打,感觉楼主被喷是因为指向性太强了,干脆说“在场的各位都是垃圾”算了。
    pigspy
        105
    pigspy  
       2022-01-21 19:06:04 +08:00
    其实我觉得 typescript 的 nestjs 这种框架就不错
    当然也可能是我 spring 写多了
    javaisthebest
        106
    javaisthebest  
       2022-01-21 19:09:05 +08:00   ❤️ 2
    go 所谓的杀手级应用也就 k8s 了

    谷歌都不怎么用的语言了

    也就国内再捧臭脚
    xsen
        107
    xsen  
       2022-01-21 19:16:01 +08:00
    @monkeyWie #19 说的好像我没用过 java sprnigboot 一样。按照我们这边的实践,go 写业务除了要造轮子之外,没有多难受。恰恰是毕业 1-2 年的同事,前后维护过 java 与 go 的项目,都说 java 用起来难受
    james122333
        108
    james122333  
       2022-01-21 19:16:38 +08:00
    楼主只是没有一个大一统框架觉得不舒服
    觉得没有规范也不想建立规范 接手的人也就几个
    自己建立是可行的 当然可能在这公司写的爽的一逼
    在其它的公司就不能 但这状况即便你 java spring 也是一样
    有规范不代表不能在业务代码或者小功能上用神奇技巧或者埋雷
    一样有机会觉得不舒服
    开源本来就没有一定要有一堆人觉得好的生态 生态好码农多 内卷也多 未必就好
    leeg810312
        109
    leeg810312  
       2022-01-21 19:21:12 +08:00   ❤️ 3
    go 写中间件是很不错,但写其他就很不适用,可是 go 社区的某种宗教式狂热已经影响到很多不是很懂行的技术决策者,让开发团队用 go 写其他的!!!就差说 go 是世界上最好的编程语言。
    写 web 还是得用 web 开发生态比较好得,我们公司用 .net Core/Java 2 个平台,可以随意切换到其中之一。
    x940727
        110
    x940727  
       2022-01-21 19:23:24 +08:00
    @xsen [除了要造轮子之外,没有多难受。] 这句话真是骚到没话说,你一个 19 寸的轮子(有文档,质量不低),我一个 18 寸的轮子(有文档,质量一般),还有一个同事是个备胎(无文档,代码各种奇淫技巧),还有个 15 寸的轮子是前同事造的(无文档,代码质量一般),目前正常,不确定未来是否正常,你觉得这不难受吗?当然,我见过很多 Gopher 都不觉得难受,毕竟有成就感,自己造轮子多好啊。
    chenxytw
        111
    chenxytw  
       2022-01-21 19:24:13 +08:00
    确实语言无关,你这是离开了框架定势就不会写代码了....
    x940727
        112
    x940727  
       2022-01-21 19:27:14 +08:00   ❤️ 2
    @xsen IT 界或者说程序员界,最伟大的东西就是开源,就是无数优质的轮子积累,可以让开发人员专心的去做自己想做的事情,但是目前来看 Gopher 大多数都没有这种思想,反而是你一个轮子,我一个轮子,这样不单单造成了人力资源的损失,更大的是造成了社区的极端分裂。
    james122333
        113
    james122333  
       2022-01-21 19:32:41 +08:00
    @leeg810312

    这种称作方案型程序员 然而研究方案花的时间未必比自己弄出来要少
    又不是要人做一个作业系统
    adoal
        114
    adoal  
       2022-01-21 19:34:48 +08:00 via iPhone
    你领导让你们用 go 写进销存,那就怼你领导或者换工作呗。
    monkeyWie
        115
    monkeyWie  
       2022-01-21 19:37:39 +08:00
    @xsen #107 牛啊,写个业务还要造轮子,应该是大厂程序员吧,我们小公司用 springboot 都是开箱即用太没牌面了
    james122333
        116
    james122333  
       2022-01-21 19:39:03 +08:00
    @x940727

    随便一个需求都可以导致你不专心 甚至追到所谓优秀轮子的底层 怎么不觉得这是成本呢?
    littlewing
        117
    littlewing  
       2022-01-21 19:46:50 +08:00
    web 本来就不是 go 的优势
    tqccc
        118
    tqccc  
       2022-01-21 19:47:17 +08:00 via Android
    丢那马,顶硬上
    xsen
        119
    xsen  
       2022-01-21 19:56:12 +08:00
    @x940727 #110 不知道是我说的有问题,还是你理解有偏差;我说除了要造轮子——那是因为相对 Java 来说,确实是缺不少成熟的企业应用的中间件;某些情况下没有合适的就要自己造轮子

    要造轮子的意思,不是所有都要造轮子
    liuxu
        120
    liuxu  
       2022-01-21 19:58:57 +08:00 via Android
    @x940727 #78 ,你要的 c++都有,所以 c++的 web 框架是最好用的,可读性最强么
    xsen
        121
    xsen  
       2022-01-21 19:59:19 +08:00
    但是相对 Go 带来的好的地方,要造轮子是属于可以接受的;选择某个语言或技术栈,都是要综合考量的
    起码对我们来说,要造轮子属于可以接受的

    个人就是从 C/C++/Java ( Springboot-微服务那套)一路过来的,只能说最终选择了 go 这个方向;而不是继续停留在 Java/Springboot 那套
    xsen
        122
    xsen  
       2022-01-21 20:07:52 +08:00
    而且 OP 本身对比就有问题,你拿 gin+gorm+zap+viper 与 springboot 这样的大一统框架做对别
    若可以,不妨这样对比,
    Java:netty + mybatis + log4j +*,
    Go:gin+gorm+zap+*

    Go 现在相对比较正确的姿势是,找相对成熟的、主流的 go 的微服务框架(相对大一统的框架)来做比较
    比如,我们目前用的是好未来的 go-zero ,做法基本就是定义 api+表,然后通过工具生成 model 与接口的代码
    jsjjdzg
        123
    jsjjdzg  
       2022-01-21 23:23:12 +08:00
    说白了就是一个语言还没有搞成规范化,以后 Go 规范化了不知道会不会打一堆人的脸。。。
    tt0411
        124
    tt0411  
       2022-01-21 23:25:24 +08:00
    有一说一, Go 写 Web 系统是真不行, 和框架无关, 主要还是语言特性 (比如缺少异常)
    utodea
        125
    utodea  
       2022-01-21 23:35:04 +08:00   ❤️ 1
    Java/Go/Node/Python 都写过生产环境的 web 类产品,你感觉没错。

    说难听点,说 Go 的 web 开发体验比 Spring 体系好的人(特别是多人体系的大项目),要么是他们没脑子且自负,要么是 Spring 社区过去整整 19 年里都在摸鱼。
    PDX
        126
    PDX  
       2022-01-21 23:39:22 +08:00 via iPhone   ❤️ 1
    用过很多种语言,最后发现还是 java 用着最安心。
    kkocdko
        127
    kkocdko  
       2022-01-22 00:01:11 +08:00   ❤️ 1
    @livid

    @liuxu #62 口吐芬芳
    xinzhanghello
        128
    xinzhanghello  
       2022-01-22 00:05:17 +08:00
    你可以了解下.net 开发学习起来是真的快 。go 不适合写业务
    liuxu
        129
    liuxu  
       2022-01-22 00:24:38 +08:00
    @kkocdko #127 我确实只教儿子,没精力教别人
    wdhwg001
        130
    wdhwg001  
       2022-01-22 00:27:15 +08:00 via iPhone   ❤️ 2
    c#是真的惨,到了第二页才有人提起它,甚至第一页的共识都是 spring 孤独求败,对比对象从起初的 go 到 php 到 js 到 py 再到 ruby ,最后竟只有一个老哥提起 .net 。

    我就在想,你们那些用过各种语言依旧觉得 spring 孤独求败的人,要不要试着用.net mvc 写一下 crud ?至少我是觉得 c#的 linq 过了这么多年依旧完全没有对手。

    顺便…甚至 php 都有 PSR 来约束和规范化 web 开发,大道至简的 go 呢。一把梭要是真的这么灵,也不会有 psr 这种东西出现了,毕竟 php 比 go 一把梭多了。
    wdhwg001
        131
    wdhwg001  
       2022-01-22 00:32:04 +08:00 via iPhone   ❤️ 6
    @Livid 我觉得 @liuxu 这个账号在拉低讨论层次和人身攻击方面多少有点过火了。
    liuxu
        132
    liuxu  
       2022-01-22 00:39:41 +08:00
    @wdhwg001 @Livid 楼主带语言的节奏,月经贴,故意挑,水深火热了
    ajaxfunction
        133
    ajaxfunction  
       2022-01-22 00:44:32 +08:00
    恕我直言,在 web 开发领域,特别是 curd 方面,所有框架语言和 php 都是辣鸡,没有例外。
    lesismal
        134
    lesismal  
       2022-01-22 01:59:03 +08:00   ❤️ 1
    对性能没要求的开发者多数都觉得体验倒退。

    所以隔三差五就会看到这种需求只有几天一次的小白吐槽正在天天七次的猛男的引战帖。
    Jwyt
        135
    Jwyt  
       2022-01-22 02:51:36 +08:00
    @liuxu laravel 。。我亲眼见到知乎一个 laravel 的布道者转了其他语言。。还是挺搞笑的
    Samuelcc
        136
    Samuelcc  
       2022-01-22 02:58:52 +08:00 via Android   ❤️ 2
    op 说的都是自己的体验,也确实是事实不是么?
    部分 Goer 是否过于狂热了。。
    我的喜好来说业务开发用 Java ,底层开发用 Rust ,Go 的应用场景比较少,语言特性也不太喜欢。在并发上可能编写起来对比 Java 有优势,总体性能还真未必。
    看过 Influxdb 的代码,用 go 写一些文件和缓存操作确实挺香,不过即便如此,由于缺少泛型也用工具生成了大量的重复代码。
    clouddd
        137
    clouddd  
       2022-01-22 07:15:57 +08:00 via iPhone
    什么 Go 啊 Node 啊 写的不好确实容易写成💩山 我能理解楼主的苦
    charlie21
        138
    charlie21  
       2022-01-22 07:44:02 +08:00   ❤️ 1
    golang 还没到那个层次。预言之中会有一个大英雄,一个盖世英雄,我知道有一天他会身披金甲圣衣,脚踏七彩祥云,在一个万众瞩目的场合来将 golang 宇宙发展成 java 宇宙,就像 Taylor Otwell 为 php 宇宙带来了 laravel 一样

    web 开发就这么点事情

    高性能的部分都做了,做个(像 laravel 一样,有 ORM ,有 Router ,有 composer 这样完备的解耦的模块管理,有 artisan 这样的命令行工具可以用来做代码生成器,有自己的或者第三方的模板语言。有成熟庞大的社区和用户数量支撑)还困难吗?

    在功能方面 早期的 laravel 只能发送 zip 文档,但这并不阻碍在沟通方面 php 作为业务语言已经用很不方便沟通的方式堆了那么多 CRUD 了
    cassyfar
        139
    cassyfar  
       2022-01-22 08:53:49 +08:00
    能力差怨语言烂。话说没 spring 你也写不来 java 了吧?
    dream4ever
        140
    dream4ever  
       2022-01-22 08:58:26 +08:00 via iPhone
    @gouflv 后来是怎么解决这个问题的?换框架么?
    drackzy
        141
    drackzy  
       2022-01-22 09:13:13 +08:00
    不是体验的问题,是 go 不像 java 那样内卷,老人少。
    zhennann
        142
    zhennann  
       2022-01-22 09:28:54 +08:00
    也就很是好奇,都说开发业务系统什么的,也就没说业务系统要有工作流需求的。如果业务系统都是些增删改查+角色权限的功能,那么大多数语言的开发框架不都跟玩似的,有什么好比较的呢?那么,回到工作流引擎的诉求,java 有 activiti ,node 有 cabloy ,而这么多年过去了,go 、php 、python 、ruby 有什么呢?
    winglight2016
        143
    winglight2016  
       2022-01-22 09:33:58 +08:00
    go 的确不适合用来做 web crud ,就我看来,在区块链开发上 go 倒是有点一统江湖的意思了,毕竟 geth 是大部分二三代应用的基础了
    goalidea
        144
    goalidea  
       2022-01-22 09:40:28 +08:00
    存在即合理,萝卜青菜各有所爱!
    ZeroDu
        145
    ZeroDu  
       2022-01-22 09:42:17 +08:00
    go 写业务 crud 确实难受,也没有相关整套框架来搞,是差点意思。写各种中间件、工具类的会比较好吧
    james122333
        146
    james122333  
       2022-01-22 09:45:02 +08:00
    @tt0411

    go 是有异常处理的 只是要封装
    例如我就封装成类似

    Error.Catch(func() {
    Error.Throw("error!", func(err error) {
    fmt.Println(err.Error())
    })
    })

    捕获错误并根据 Throw 指定的 func 执行
    写过 java try catch 会知道 try 内新的变量在外面是取得不到的
    这特性如同函数内区域变量

    不要动不动就说语言不行 先看一下自己是否行
    zjsxwc
        147
    zjsxwc  
       2022-01-22 09:47:09 +08:00   ❤️ 1
    @zhennann
    各种基于 php 、ruby 的 oa 工作任务流转的开源项目不要太多,
    就算是 redmine 的 issue ,也能魔改出当内部 erp oa 使用。
    JDog
        148
    JDog  
       2022-01-22 09:47:39 +08:00
    国内 php 不景气,都转写 golang 了,说话的无非都是利益相关。
    zjsxwc
        149
    zjsxwc  
       2022-01-22 09:50:43 +08:00
    @zhennann
    go 也有个 v 站网友开发的 ferry
    https://www.v2ex.com/t/709056
    sealingpp
        150
    sealingpp  
       2022-01-22 09:53:42 +08:00
    有时候是这样子的,你习惯了一门语言给你带来的便利性,换了一种语言就觉得不方便,每个语言诞生的开发的思维流程不一样,不代表他不好,你应该尝试去理解一下其中的道理,而不是总是希望所有东西都跟自己熟悉或者习惯的一样,一来就觉得非常顺手
    flood
        151
    flood  
       2022-01-22 09:55:58 +08:00   ❤️ 1
    大道至简......陋
    RuLaiFo
        152
    RuLaiFo  
       2022-01-22 09:56:28 +08:00 via Android
    占 Java 一票
    debuggerx
        153
    debuggerx  
       2022-01-22 09:58:04 +08:00 via Android   ❤️ 1
    认同一些人说的,若是没有 spring 等框架,java 开发 web 也是垃圾,但是 go 开发 web 业务,却是连框架都救不了它的,就算有 spring 同等规模、积累、流行度的框架也是一样,这是语言特性决定的
    james122333
        154
    james122333  
       2022-01-22 10:13:52 +08:00
    @debuggerx

    没写之前我觉得应该是这样 因为很多人都这样觉得
    真的写了觉得其实还不错 特别适合 DIY 用户 也可以很好维护
    shawnwang340
        155
    shawnwang340  
       2022-01-22 10:22:49 +08:00
    我是因为公司新项目需要开始搞 go 的,初上手的时候也是感觉哪哪都不习惯,每次写的时候总想着 java 那一套,现在我再写 go 的时候都极力忘记自己之前是写 java 的,哈哈哈,我感觉还是一个思维定势的问题吧,多写写就好了。
    micean
        156
    micean  
       2022-01-22 10:25:49 +08:00   ❤️ 1
    @debuggerx

    你完全不了解 java 生态的可怕。。。。。spring 只是一个粘合剂,java 在 web 这块真的是要啥有啥,而且还有各种标准化的东西,减少心智负担。
    abcbuzhiming
        157
    abcbuzhiming  
       2022-01-22 10:29:22 +08:00   ❤️ 2
    @cassyfar 框架存在的意义,就是方便开发。否则程序界孜孜不倦的探索各种模式,各种模型,各种框架,是为了什么?动不动就说别人“能力差怪语言”的,那你干脆倒退回去用纸带打孔机开发好了,我绝对承认你能力超强,我做不到。

    编程发展了这么久,一个大方向是没变的,就是想办法把更多的人拉进程序员的行列,哪怕他们能力比起前人来说差。编程整体是变的容易而不是变的困难。


    @liuxu
    go 还是个偏年轻的语言,生态圈还在探索中,不如成熟生态圈,这有什么不可以说的?说两句就是“带节奏?人差怪语言?”。那我作为一个 javaer 天天喷 java 语言特性陈旧,主流生态圈膨胀 spring 快赶上当年 Sun 那套傻大黑粗,算什么?语言不能比较?程序员不准抱怨?抱怨就是带节奏?
    zhennann
        158
    zhennann  
       2022-01-22 10:29:48 +08:00
    @zjsxwc 可以看一下 CabloyJS 的工作流引擎文档,就知道差距在哪里了: https://cabloy.com/zh-cn/articles/flow-introduce.html
    iyaozhen
        159
    iyaozhen  
       2022-01-22 10:38:39 +08:00
    现在写 go 就像之前写 php 一样

    期待大统一框架吧

    当然你要用 java 的惯性写 go 会很难受
    james122333
        160
    james122333  
       2022-01-22 10:38:54 +08:00
    @abcbuzhiming

    编程语言发展的到现在花的时间是更多 过度堆叠减少某些困难又增加了某些困难
    然后出来的东西是增加的 如果没有网络资源 原作者回答 很多人都用不好
    自己写的自己知道 如果写的不好是人的问题没错 就算用框架照样可以给你一驼
    go 目前状况挺好的
    24bit
        161
    24bit  
       2022-01-22 10:40:08 +08:00
    Java 运行在虚拟机上,框架利用 JVM 的特性可以将很多的编码成本抽象出来,一个注解就能让你省去很多开发成本。同时支持泛型,语言本身的表达能力也会强很多。

    Golang 虽然有 runtime ,但是运行时能够做的操作很有限,性能也差,泛型还要 2 月 1.18 才有,框架能做的事就很有限了。代码复用要么写多份,要么 interface{} 满天飞,要么代码生成。比如 GORM 一堆反射 + interface{} 带来的类型信息丢失就很烦。现在有了 GORM GEN 会好一些,但还是靠的代码生成。

    Golang 的优势在于简单,新人几天就可以上手,同时先天异步,打包出来的容器镜像小,启动速度快,天然适配云生态。
    beexu
        162
    beexu  
       2022-01-22 10:51:14 +08:00
    总结:v 站 gopher > javaer
    abcbuzhiming
        163
    abcbuzhiming  
       2022-01-22 10:52:17 +08:00
    @james122333
    我从不否认程序员的水平有高有底。但是编程半个多世纪的发展来看,其发展方向就是把更多的人拉进编程界——哪怕看上去他们能力不行(尤其是和前人比起来的时候)。

    编程并不是少数 [聪明人] 的玩物。然而现在有少数人觉得,因为 [因为我可以,而你不行,所以你不准抱怨] 。然而只要编程的大方向是像我说的那样:拉更多更“一般水平”的人进来编程。那么抱怨只会多,不会少,听不进抱怨是少数 [聪明人] 自己的问题,指责这些一般水平的人“水平差怪语言”的 [聪明人] ,就像历史车轮前的螳螂。


    最后,在应用层领域,所有的语言,都会趋同演化。所以只要给足够的时间,就会发现这些语言在处理同一类型问题上会采用类似的方法。


    go 的发展方向,不由我们这些人决定,只取决 google 怎么想,如果它想进入业务领域,我认为它大概率也会变的和那些在业务领域活跃的语言一样,背上同样的包袱。顺便说一下,java 的生态圈历史包袱已经很重了,spring 击败了曾经的 JavaEE ,但是它现在越来越像一个新的恶龙了。
    james122333
        164
    james122333  
       2022-01-22 10:57:46 +08:00
    @24bit

    反射在 go 下确实不好 但保存下其实也还好
    至于类型丢失 java 也是一样情况 呼叫共同函数你需要 type interface
    不然 Object 还是 Object
    然后范型问题其实 cast 一下也还可以 并没有那么急需
    james122333
        165
    james122333  
       2022-01-22 11:11:33 +08:00
    @abcbuzhiming

    不是所有语言都是这种发展方向 而且以打工仔来说更多人就是更容易内卷
    这不是指聪明人而是愿意自己造轮子的(理性造轮子) 造不造轮子与聪明没有直接相关
    当然聪明造的轮子可能更好 现在就一堆只想吃外食不想自己煮的
    golang 应该没讲是为了你们需求而生
    abcbuzhiming
        166
    abcbuzhiming  
       2022-01-22 11:25:45 +08:00
    @james122333

    语言的发展方向要看语言背后的那波人的想法。其实我可以说 golang 的创始人恐怕压根就不想用 go 去搞业务领域,不然为啥加个泛型要折腾这么久呢,明显是 google 看上了这块肉,逼的。


    不想自己煮,天天抱怨没轮子是“普通人”的常态,只要编程界还是试图让更多的“普通人”进来编程,那这就是历史趋势。


    造不造轮子确实与聪明没有直接关系,我的 [聪明] 是加引号的,我相信你应该明白我指的是什么。


    对“普通人”的抱怨,听听没坏处,可以不理,但是喊打喊杀就很无聊,世界永远是普通人占多数
    hqweay
        167
    hqweay  
       2022-01-22 11:43:39 +08:00 via iPhone   ❤️ 1
    看到这篇帖子加深了我的偏见,现在网上想讨论点问题、表达点东西太难了。即便表达的人加上了各种限定词,总会有凑热闹的观众、只读到几个关键词的观众、不关心内容想发泄上网为了放松的观众……毫无负担地留下一些话就走了,表达的人为了阐释清楚,为了不让后面的人误解,总得一遍又一遍的解释,通过不断的否定把话题拉回正题…
    james122333
        168
    james122333  
       2022-01-22 11:48:03 +08:00
    @abcbuzhiming

    是常态但抱怨也要抱怨在点上 不然不就是一样大家说的喷子
    说"是自己的问题"未必是指自己是聪明人 用聪明人调侃就过了
    业界如果选 go 那自然是要自己付责 当然喊打喊杀也过了
    但可以体会他们的心情 先做功课再来喷应该就不会那么火爆
    iseki
        169
    iseki  
       2022-01-22 12:04:20 +08:00 via Android   ❤️ 3
    go 缺少 Java 和其他语言上那种大一统框架很大程度上是由于 go 本身的简陋导致的。没有泛型,没有异常,没有现代的 lambda 就注定它是一个 C 风格的语言;本来有的协程 ID 还被刻意隐藏(设计问题),go 很难弄出 Java 上的 ThreadLocal 那种东西,很多东西的实现必然变得复杂…
    总而言之 go 是一个完全不适合写业务的语言,缺少的特性将使你不得不把大量精力放在业务逻辑之外的部分…而且很大概率一个项目一套“标准库”,甚至一个人一套“标准库”…
    iseki
        170
    iseki  
       2022-01-22 12:06:51 +08:00 via Android
    任何语言都有其特定场景下的优势,比如最近用 go 写纯 cli 的客户端就觉得确实方便…
    但是我真想不明白为什么总有人逼着我用 go 写 Web
    iseki
        171
    iseki  
       2022-01-22 12:10:46 +08:00 via Android
    @lesismal 大部分人写 Web ,对性能其实没这么高要求,需要性能的 javaer 自然会去用 vertx 之流…环境逼着大家用 C 干 php 的活才是越来越爆炸的原因吧。
    mengyx
        172
    mengyx  
       2022-01-22 12:25:59 +08:00
    更喜欢 Go ,是因为它是重工程实践的语言。常用功能标准库中都有很优秀的实现;代码逻辑清清楚楚,没有太多隐含逻辑;如同测试、优化等方面,官方有大量的工具可用
    iseki
        173
    iseki  
       2022-01-22 12:31:52 +08:00 via Android
    另外我实在不能理解 go 出于什么考虑,让大家自己造 maxInt minInt 这样的东西…
    james122333
        174
    james122333  
       2022-01-22 12:40:34 +08:00
    @iseki

    go 有 lambda 也有 closure 不知道现代的是?
    也有异常 如果是 func 有无 threadlocal 有差吗
    iseki
        175
    iseki  
       2022-01-22 12:46:27 +08:00 via Android
    @james122333 抱歉,你的评论没标点符号我也只能根据感觉去断句了。
    go 有 lambda 和闭包,但从语法角度上说,go 那个充其量算个匿名函数,和其他语言中的 lambda 相比差距还是有点大的。
    异常…如果是指 panic 和 recover 你自己也说了,得是 func ,而且由于 go 本身不提供良好的异常标准库(现在那个 errors 没多少人想用吧)导致不得不依赖三方实现。
    至于 ThreadLocal ,我只能说很多框架特性需要这个,但是 go 从设计上确实不推崇这个,显式传递上下文也不是不能用,算是个人喜好吧
    EscYezi
        176
    EscYezi  
       2022-01-22 12:47:54 +08:00 via iPhone
    @banmuyutian less feature,more code(doge
    james122333
        177
    james122333  
       2022-01-22 12:52:57 +08:00
    @iseki

    剩下的就是给你扩充的 为何一定要原生语法?
    如果他不保留扩充性那我也喷 可是他保留了
    用 go 也不一定非得用它的标准库 如果你想可以自己弄一套出来
    iseki
        178
    iseki  
       2022-01-22 12:54:46 +08:00 via Android
    @james122333 emmm 你不觉得“用 go 也不一定非得用它的标准库 如果你想可以自己弄一套出来”这事一点都不工程吗。标准库为什么叫标准库呢,这也是我上条里标准库加引号的原因吧。
    james122333
        179
    james122333  
       2022-01-22 13:04:51 +08:00
    @iseki

    当然工程 但不防碍你如何使用它
    如果你不视其为标准它就不是
    当然大环境是标准的
    windseekerjack
        180
    windseekerjack  
       2022-01-22 13:26:51 +08:00
    不是很清楚你是在什么场景写 go ,按照我了解的,go 的技术栈一般是基于 grpc+gateway 提供 web 服务,接口定义交给 proto ,业务按照 handel/servicer/model 分开写,常用工具丢 utils 包统一维护,hook 来实现 aop ,不是很懂你们的痛点在哪?
    @iseki go 简洁不代表简陋,B 站也公开了自己的架构,自己去参考,有好的实现不去了解,自己立个靶子打
    shunia
        181
    shunia  
       2022-01-22 13:35:12 +08:00   ❤️ 1
    @Livid #62 突然开始不说人话
    windseekerjack
        182
    windseekerjack  
       2022-01-22 13:37:53 +08:00
    @binbinyouliiii 建议多看看拿 go 做主业务的这些公司的框架组件,基本都开源了或分享了架构设计,你列出来的这些都和语言没半毛钱关系,没有 spring ,java 裸写 web 服务的体验就很好?实际上 web 开发对语言没什么要求,java/python/go/php 写起来都各有优点,不要写个 demo 就对一个语言评论来评论去。
    darknoll
        183
    darknoll  
       2022-01-22 14:16:08 +08:00
    我个人的原则是面对工资编程,钱给够,啥语言不能干啊。
    扯什么语言好不好的,要么不会用,要么不成熟。
    encro
        184
    encro  
       2022-01-22 14:39:43 +08:00   ❤️ 1
    当你了解 3 门以上语言的时候,就不会想这些问题了,开发没有银弹。

    C:执行效率+底层+兼容性+入门简单
    C++:执行效率+底层+面向对象
    Rust:执行效率+底层+安全+cargo 生态加分
    Php: Web 开发效率+入门简单+composer 生态加分
    Python:万能+入门简单+pip 生态加分
    Go:并发机制+入门简单+go get 生态
    Java:万能+学习曲线平滑
    C#:桌面开发+开发效率+学习曲线平滑
    Node:客户端运行+入门简单+npm 生态加分

    可以看到:

    1 ,最近几年能流行的语言都有一个共同点就是包管理生态加分,Java 和 C#虽然万能,但是社区掌握在某些公司且需要虚拟机运行环境,所以发展还是慢了点。

    2 ,每门语言都有时代特色:1 代解决的是基础设施问题,这时候主流是 c,c++; 2 代是互联网服务端和客户端蓬勃发展,主流是 PHP,Python,java,C#; 3 代是云计算,科学计算,大数据主流是 C++,Python,Java,Go,Rust
    Joker123456789
        185
    Joker123456789  
       2022-01-22 16:06:38 +08:00
    go 开发 web 可以试一下这个框架,比较接近 java 的习惯。https://beeruscc.com
    vophan1ee
        186
    vophan1ee  
       2022-01-22 21:41:14 +08:00
    看到这个帖子让我想起了很久以前看到 c 语言的用户喷使用 c++ 的人:动不动就问语言有没有这个,有没有那个
    lesismal
        187
    lesismal  
       2022-01-23 11:36:45 +08:00   ❤️ 1
    @iseki #171
    很多现象都是一个道理,类似劣币驱逐良币,金字塔结构,水平一般的人总是占据多数,所以一些不好的东西反倒因为用泵众多而更火,最典型的比如 nodejs 。

    绝大多数喷 go 的人,都是只会 curd 的初级中级开发者,系统、架构、算法、结构、性能之类的都还没真正懂,稍微大点的项目、要求高点的项目都没做过,自己的技术职级和薪资还没达到高阶的水平比如百万,甚至 java 社区很多伪架构师(比如阿里 p7 甚至 p8 ),只会根据自己多数情况靠 cv 就能解决的业务代码习惯来评价技术栈、喷都喷不到点子上——这也是你另一个帖子里为什么 gopher 反感别人喷,因为绝大多数都是乱喷。
    ifhover
        188
    ifhover  
       2022-01-23 13:43:02 +08:00
    试试 goframe
    agagega
        189
    agagega  
       2022-01-23 20:38:48 +08:00
    @wdhwg001
    说起来,我见过一个作用和 C# LINQ 相似但思路完全相反的东西,就是苹果的 NSPredicate:LINQ 是把 SQL 写成代码,这玩意是把代码写成 SQL ,脑洞贼大。
    wdhwg001
        190
    wdhwg001  
       2022-01-23 21:56:22 +08:00
    @agagega 其实 LINQ 也是支持 Query 写法的,虽然现在不是很常见,而且糖含量过高,看起来和正常的语法区别过大。

    另外你好像被降权了,我收不到你的回复提醒。
    gongquanlin
        191
    gongquanlin  
       2022-01-23 22:19:01 +08:00
    laravel 和 spring 都写,只是思考模式不一样;
    以前也觉着 laravel 对比 spring ,spring 辣鸡的想屎一样,现在发现实际上发现,只要以 aop 的思想去写 spring ,也可以很香; laravel 的路由控制器分离、没有 domain 反而觉着有时候不方便;虽然 laravel8 的路由可以直接写控制器的类,但是还是不如 spring 的注解路由方便;但是 laravel 的 collection 、orm 这一套,就是比 list 、map 和 mybatis 、mybatis plus 用的舒服,不服不行好吗
    go 没有 laravel 准备好的的 facade ,没有 spring 的注解,数据库用 gorm ,写起 crud 逻辑就是累,go 本身就适合无状态应用开发,云原生应用,用在并发场景,websocket 、用 grpc 就是舒服。
    前端写 vue ,nginx 搞一把,接口负载一把
    自己的项目,crud 业务用 laravel ,简单队列用 laravel-queue ,长连接 websocket 用 go ;
    公司业务 sping 一把梭哈,实现一把 redis 队列,主要是独立部署给客户的多,什么定时任务、队列都带着了,甲方 restful api 、webserices 、rpc 都能搞

    都香得很好吗,各有各的优势
    NeoZephyr
        192
    NeoZephyr  
       2022-01-24 10:36:39 +08:00
    @liuxu 有点素质!谢谢
    NeoZephyr
        193
    NeoZephyr  
       2022-01-24 10:42:11 +08:00
    @windseekerjack b 站的代码,网上又不是没有,感觉真不咋滴
    NeoZephyr
        194
    NeoZephyr  
       2022-01-24 10:44:02 +08:00
    @leeg810312 “世界上最好的编程语言” >>> 好熟悉的声音!果然写 GO 的都是 PHP 转过去的吗
    tt0411
        195
    tt0411  
       2022-01-24 11:08:42 +08:00
    不想在语言上争执太多, Go 有他的适用场景, 但是写过复杂 Web 应用的话如果用过其他语言 (包括但不限于 Java/PHP) 就知道 Go 有多不靠谱, 现在微服务架构让单个模块的代码层次很简单, 一定程度上缓解了 Go 的这方面毛病. 话说 Go 也开始考虑支持泛型了, 我记得我写 Go 那会, 官方似乎对泛型很不屑... 没准过个一两年 Go 也会支持异常的 hhh
    windseekerjack
        196
    windseekerjack  
       2022-01-24 11:10:58 +08:00
    @NeoZephyr #191 不知道你看的是泄漏出来的源码还是开源的组件。代码和目录规范性,代码生成工具都不错,对新人友好,新入职的估计 1-2 天就能进入开发,除了全部业务放一个仓库外我没看出什么别的问题,不是很清楚你觉得不咋滴是哪些方面?
    thtznet
        197
    thtznet  
       2022-01-24 11:18:39 +08:00   ❤️ 1
    很多年前写前端的人嫌 手动操作 DOM 太随意,BUG 到处飞,于是出现了 jQuery 库规范基础的操作,jQuery 写多了又觉得代码设计不够优雅,于是出现了框架将 DOM 操作封装隐藏起来,老外软件工程起步早,一来就意识到了问题核心,搞了个 Angular ,把前端衍化体系一下子快进到和后端一样,这时候国内的前端人刚刚脱离切图仔的标签,jQuery 还没捂熟哪见过这么体系化的技术,纷纷表示这玩意太复杂太重了,发展不开。寻了 N 久找到一个模仿并简化 Angular 的 Vue 框架, 就是它了,最适合国内的行情,带着点设计模式比 jQuery 高得不知道哪里去了,又比 Angular 简单啊,那么多代码堆一个组件里一把梭齐活,搞着搞着,就成了江湖。
    NeoZephyr
        198
    NeoZephyr  
       2022-01-24 17:36:49 +08:00
    @windseekerjack 代码和目录规范性不是基本的要求吗?至于 1-2 天是否能进入开发,这个变量影响太多了,不一定跟代码质量有关系。我觉得可读性一般,很多命名很离谱,封装性也不好,有很多重复的代码。有一些代码实现,感觉很奇怪,我接触到的一般也不会那么写
    windseekerjack
        199
    windseekerjack  
       2022-01-24 19:19:22 +08:00
    @NeoZephyr #196 为什么关注代码质量,业务代码哪家公司都是一堆屎,更别说经手那么多人。关注项目结构,开源组件怎么引入工程,生成工具。
    还有,我举例 b 站只想告诉楼主,不要随意写个 demo 就出来谈感受,楼主说的这些问题,b 站开源的 Kratos/或者其他开源组件都能快速解决,但是楼主没有想过去了解,讨论规范,spring 基于 servlet 规范,go 除了 fasthttp 都基于 net 包,这就不规范了?输出一堆情绪,拿楼主说的套一个新人写 java/c#有什么区别?
    xinQing
        200
    xinQing  
       2022-01-28 16:40:47 +08:00
    web 项目用 go 不是搞人心态么,事务处理起来不难受么。。interface{}、err 满天飞。

    go 搞一些基础组件,网络中间件啥的挺好的。
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3178 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.