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

2022 年 1 月 21 日
 binbinyouliiii

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

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

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

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

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

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

23363 次点击
所在节点    Java
204 条回复
24bit
2022 年 1 月 22 日
Java 运行在虚拟机上,框架利用 JVM 的特性可以将很多的编码成本抽象出来,一个注解就能让你省去很多开发成本。同时支持泛型,语言本身的表达能力也会强很多。

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

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

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


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


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

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

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

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


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


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


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

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

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

剩下的就是给你扩充的 为何一定要原生语法?
如果他不保留扩充性那我也喷 可是他保留了
用 go 也不一定非得用它的标准库 如果你想可以自己弄一套出来
iseki
2022 年 1 月 22 日
@james122333 emmm 你不觉得“用 go 也不一定非得用它的标准库 如果你想可以自己弄一套出来”这事一点都不工程吗。标准库为什么叫标准库呢,这也是我上条里标准库加引号的原因吧。
james122333
2022 年 1 月 22 日
@iseki

当然工程 但不防碍你如何使用它
如果你不视其为标准它就不是
当然大环境是标准的
windseekerjack
2022 年 1 月 22 日
不是很清楚你是在什么场景写 go ,按照我了解的,go 的技术栈一般是基于 grpc+gateway 提供 web 服务,接口定义交给 proto ,业务按照 handel/servicer/model 分开写,常用工具丢 utils 包统一维护,hook 来实现 aop ,不是很懂你们的痛点在哪?
@iseki go 简洁不代表简陋,B 站也公开了自己的架构,自己去参考,有好的实现不去了解,自己立个靶子打

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/829692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX