go web 和 Java spring 比优势在哪里?

2021-09-11 13:12:11 +08:00
 whatisnew

最近接手一个 go 的项目,gin 框架写的,main.go 各种 init 手工拼接日志、路由、orm 、grpc 等,c *context 之类的指针满天飞,日志都得自己定义,还定义的乱七八糟,相比 spring 一把梭一点都不顺滑啊,所以,很多项目转 go 是为了个啥?就为了省那么点内存?

12083 次点击
所在节点    Go 编程语言
98 条回复
ToBeHacker
2021-09-11 17:51:16 +08:00
golang 在工程领域称王称霸已经是趋势了
zjsxwc
2021-09-11 17:56:25 +08:00
昨天看了,b 站泄漏的 go 后端代码确实朴实无华,单感觉这么弄也很稳。

https://www.cnblogs.com/zjsxwc/p/15253790.html
DeWjjj
2021-09-11 17:56:43 +08:00
那种文件直接过去不要依赖的感觉是真他妈爽。
wangbenjun5
2021-09-11 18:22:58 +08:00
go 在 web 方向确实缺少一个全栈的框架,基本上都得自己再攒点东西进去,好处就是简单易懂,门槛低。
cuebyte
2021-09-11 21:05:27 +08:00
一把梭 Spring Boot 没话说,然而 Go 的优势在于招人不用卷在语言上:

Java 的 Collections,并发,JVM,代码风格都要考... 没有个 2 年经验都不敢要。公司招人的时候自己也够喝一壶的。

Go 的话相对没那么卷,并发相对简单,任何背景的程序员都可以转 Go 。 招人的时候可以把更多的经历放在架构设计、业务能力和软技能上。
chendy
2021-09-11 21:41:54 +08:00
java 农,表示啥时候 go 也有个全家桶的框架再去玩
LukeEuler
2021-09-11 22:41:46 +08:00
@UserNameisNull 巧了,我就是 java 转的 go 。从语言和生态上,java 都比 go 强。但是,转 go 的理由也是有的,仅个人理解:写 java 的人不行。没有一个例外,全都不行。这些人成了 java 最大的短板。
简单说明一下:python 2 3 共存了很长时间,阵痛了很长时间。看看现在的 java,简直就是一个无解的 2 3 4 5 6 7 8 。。。版本共存。解决不了这个问题,就是人的问题。
josephok
2021-09-11 22:58:15 +08:00
怎么老有人拿 Golang 与 Java 比较? Golang 诞生之初就没有拿 Java 当目标,而是对标 c, c++,语法也更类似 c 语言,号称是“网络时代的 c 语言”。Golang 更适合写一些系统级的应用,而 Java 更适合写业务代码,二者没有可比性。
iPhone9
2021-09-11 23:06:51 +08:00
@josephok 想什么呢?对标 c c++?就 golang 那性能?
rhacker1995
2021-09-11 23:07:35 +08:00
graalvm,micronaut,quarkus,kotlin 在运原生时代让 go 毫无优势,至少在业务代码方面。
dhssingle
2021-09-11 23:12:57 +08:00
@gaigechunfeng #36 你这是哪的 .net core,要 10 个 G 。
FrankAdler
2021-09-11 23:19:48 +08:00
你说的这些,只是因为没有一个 spring 这样的框架而已,main 里面拼 init 啥的,也完全可以像 spring 那样隐藏起来,只暴露一个 application run,但是何必呢,为了这些发明各种范式,各种设计模式。
Java 的各种语法糖全用上效果是可以隐藏起来很多细节,这有太多性能损耗和工程复杂性,所以选择能看懂代码都算牛逼的了,结果就是 Java 编程成本不在 Java 上,而是在各种这些东西了,挺奇妙的。
josephok
2021-09-11 23:27:05 +08:00
@iPhone9 单拿性能说事?既然是对标,那就是全方位的对标,Golang 在简洁性、编译速度、开发效率、包管理机制上是全面碾压 c++的。
cmdOptionKana
2021-09-11 23:33:05 +08:00
@josephok 有 GC 的语言不可能对标 c/c++,对标对标 c/c++就必须强调性能,“简洁性、编译速度、开发效率、包管理”本来就不是 c/c++的强项。

比如小明数学考试 99 分,英语考试 59 分,对标小明的意思就不可能看小明的英语能力。

另外,golang 官方也从未号称“网络时代的 c 语言”,不负责任的媒体瞎写或网友戏言不可当真。
drackzy
2021-09-11 23:33:39 +08:00
目前为止,还没有那么多培训班捣乱。
yangyaofei
2021-09-11 23:50:41 +08:00
其实 web 相关的主要矛盾不是项目的性能之类的,而是在怎么让参差不齐的开发人员能共同完成一个项目……

一个语言或者框架好不好,并不是只看他的性能和是否容易实现之类的,而也要考虑不同的开发人员实现的效果是否比较一直。

都是理查德曼怎么写都行,甚至我自己写在我更愿意用 python,但是人多了水平不能保证的时候,我肯定不会选 python 。
iPhone9
2021-09-12 00:12:48 +08:00
@josephok rust 才是对标 c c++的,golang 就算了吧
shuimugan
2021-09-12 04:29:40 +08:00
编译后体积小,冷启动速度快。
在 serverless 架构上,以阿里云为例,允许使用自定义 docker 镜像运行,如果你的镜像体积(压缩后) 100MB 以内,冷启动的时候拉取->解压->运行->就绪的整体消耗在 1~3s,同时单个实例在 1 核 128MB 内存下可以承受 1000 并发(阿里云这点很垃圾,8 核 32G 内存和 1 核 128MB 内存最高的并发都是 100 ),那么服务器(无状态的应用部分)费用会变得及其低(完全按量付费),部署及其无脑,弹性伸缩非常方便。

并发模型简单高效也是一个优势,很多 java web 项目在线上跑,当代码会请求另一个可能耗时的接口时,整体应用稳定性基本处于玄学状态(比如启动分配 200 线程来处理请求,单一接口依赖了一个耗时不稳定的接口,可能要等 5s 才有返回,当这个接口被狂刷时,线程池被打满,其他接口请求进不来,表现就是整个服务都凉了),各种线程池大小配到傻对整体的 QPS 提升也不大,这时就会想各种蹩脚方案了,还不如一个异步模型来得爽快。于是这时候又要进之前关于 java 全异步解决方案里面的帖子里吵了,不如直接换语言。
iseki
2021-09-12 04:55:39 +08:00
Go 唯一的优势大概就是编译快了,大道至简在 Go 上说好听了是简洁,说难听了就是简陋。
连 Min Max 都要我自己造的“现代语言”,一项目造一份自己的各种混乱的 utils 这个,工程角度上看离 Java 还有一定的距离。
明明好多地方都卡死了使用方式,连 GoroutineID 和对标 Java 上 ThreadLocal 的东西都没有;结果这些基本的函数反倒自由了。
iseki
2021-09-12 05:01:23 +08:00
@yangyaofei 总觉得这个问题得从两头看,太复杂强大的语言特性必然给水平参差不齐的团队带来麻烦,可是特性和库异常简陋也绝对不会给这种场合带来什么好处

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

https://tanronggui.xyz/t/801212

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

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

© 2021 V2EX