2

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

 2 years ago
source link: https://www.v2ex.com/t/801212
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Go

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

  whatisnew · 1 天前 · 5026 次点击

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

83 条回复    2021-09-12 19:55:20 +08:00

acrisliu

acrisliu   1 天前 via iPhone

启动速度也是优势

sunny352787

sunny352787   1 天前   ❤️ 7

用 go 的第一件事,开骂,很正常

sagaxu

sagaxu   1 天前 via Android   ❤️ 6

启动速度
内存占用
打包体积
交叉编译
框架简洁

wellsc

wellsc   1 天前 via iPhone   ❤️ 2

点 netcore 现在结合了两者的优点,还是没人用

yeqizhangyeqizhang   1 天前 via Android

个人比较喜欢的是 go 打包成单个执行文件,交叉编译。
使用过一些项目就是引用 github 的依赖包比较烦……

wangxn

wangxn   1 天前   ❤️ 2

原生语言,直接编译到机器码
内建 goroutine,有 GC
无运行时,直接一个可执行文件走起,部署极其简单
现代化,内建包管理
现代化,官方提供 laguange server/lint/formater 等一系列用来写 IDE 和编辑器的工具
语法简单,作者也是 C 的作者,爹是 Google

yinzhili

yinzhili   1 天前

目的可能是提高门槛

ChrisFreeMan

ChrisFreeMan   1 天前   ❤️ 3

我个人喜欢的 go 语言的点,特性简单,对比其他的编译型语言,没有那么多杂七杂八让人难懂的东西,工程目录对比 C#项目简洁太多。跨平台兼容性非常棒,对比 Pyhton 简直好太多,又快兼容性又好。能做的东西很多,后端,前端,游戏开发,脚本。运行简单,编译简单。我真的找不到比这个更适合拿来做个人开发更好的语言了

2435043xia

2435043xia   1 天前 via Android

@wangxn go 是有运行时的,打包在程序里

iRiven

iRiven   1 天前

是的,开发 web 应用没有 Java spring 来的舒服

CEBBCAT

CEBBCAT   1 天前 via Android

Go 简单,编译快,部署方便。如果项目实在太乱,最好先考虑考虑是不是写代码的人需要提升

刚刚切换语言、项目会有一段阵痛期,捱一捱就好了

Vegetable

Vegetable   1 天前   ❤️ 2

我很迷惑,init 拼接就比 xml 差?

Vegetable

Vegetable   1 天前   ❤️ 10

起码你一个 java 开发者,拿到这个项目之后,没有说看不懂。反过来没写过 java 的人去接手一个 spring 项目,能直接吐出来。

Bazingal

Bazingal   1 天前

除了编译快,好像也没什么了,大家都用 docker 了,部署都是一样的,管你单文件还是多文件,至于内存占用,这个不能只看刚启动的内存,得看使用过程的内存占用

xgfan

xgfan   1 天前   ❤️ 2

CRUD 用 Go 写就是为难自己,但是写中间件,写一个工具就很方便。

q447643445

q447643445   1 天前   ❤️ 5

个人对 编译成 native 天生有好感

SuperManNoPain

SuperManNoPain   1 天前

历史的轮回罢了,老东西大家就想换新,😅

lysS

lysS   1 天前

你这也不能全怪 go 啊,这明明是框架约束性不同导致的;当然你也可以说 go 生态不行、没有个 spring 一样的框架

eric96

eric96   1 天前

没用过 go,但你提的这些问题,我觉得是生态问题,没有好用的轮子,所以自由发挥

wanguorui123

wanguorui123   1 天前 via iPhone

Go 免费、JAVA 收费

UserNameisNull

UserNameisNull   1 天前

@sunny352787 第二件事,继续开骂,
然后不得不接受公司的现实。

Takamine

Takamine   1 天前 via Android   ❤️ 1

对中大型企业级应用来说,go web 目前毫无优势。

UserNameisNull

UserNameisNull   1 天前

没有一个在做真正的对比,感觉都是从 C 转到 Go 的。

优势劣势,你说的很清楚了,很赞同。

你见过 java 项目转 go 吗?肯定没有的。

要么是 python 项目转 go,php 转 go,c 转 go,这群人对于 java 不了解,甚至鄙视,那就只能选择 go 了,运行效率高,开发效率极差。

fengsi

fengsi   1 天前

@Vegetable 虽然我没用过 go,但是你说的我很支持。

agagega

agagega   1 天前

代码简洁和语法概念少,这两个是矛盾的呀

x940727

x940727   1 天前

@agagega Go 神教就可以语法简单,代码也简洁。狗头保命 :)

charlie21

charlie21   1 天前

一个猜想,不一定对:
给你一种用 xxx 就是王道的幻觉。若几年之后 xxx 人才饱和了,你是不是已经赚够五百万了还要转回 java 阿?
其实根本就是 java 太卷了,卷到让创建岗位的人能开出的好岗位太少了,奔个人少钱多所以转行去写 xxx,沧海桑田赚个快钱而已。

同样的情况,让写 delphi 也会有人去,让写什么 foolang 或 COBOL 也会有人去,只不过写 COBOL 的那群人不上网而已

岗位多钱也多,这就是风头,这不可持续。这是一个真空球形鸡的猜想,上文的 xxx 可以是 golang 也可以是 iOS,可 golang 创造的岗位不会比 iOS 更多吧?参考当年的 iOS 大牛的故事
贵站搜 iOS 离婚

zorui

zorui   1 天前

@wanguorui123 没在点上。。open jdk 也很香。

Cbdy

Cbdy   1 天前

如果原来的系统不是 Go 写的,可以用 Go 重构

iyaozhen

iyaozhen   1 天前

go 对 java 有优势

但 go web 和 spring 完全不能比,项目做多了就喜欢标准化的(不需要纠结选啥库,更多精力做业务),spring 写的再差也中规中矩,go web 的话能写出花,还是希望框架统一点(事实上公司内部是统一的,用起来还是很舒服)。

iyear

iyear   1 天前

go web 和 spring 咋比。。要说也是说 go 的生态还不太完善,没有类似 spring 的重量级框架

cmdOptionKana

cmdOptionKana   1 天前

Java 转 Go 本来就不多吧?反而 Python 、PHP 转 Go 比较多。

zxCoder

zxCoder   1 天前

.net 也能打包单文件

gaigechunfeng

gaigechunfeng   1 天前

@wellsc .net core 我倒是尝试过一段时间。一开始就下载安装 10 个 g 的素材包,有点劝退。

hutoer

hutoer   1 天前

Java spring 是工业级的
go web 是个人级的

magicdu

magicdu   1 天前

我搞 java 的,没用过 go 写 web,刚开始学,写了个和公司手环交互的通信代理,感觉可以,用起来比 java 简单,轻量

tydl

tydl   1 天前 via Android

我爱 php,php 天下第一

AllenHua

AllenHua   1 天前

那期待有人来给 go 来个 Summer 框架(对标 Java Spring )吧 🐶️

ToBeHacker

ToBeHacker   1 天前   ❤️ 1

golang 在工程领域称王称霸已经是趋势了

DeWjjj

DeWjjj   1 天前   ❤️ 1

那种文件直接过去不要依赖的感觉是真他妈爽。

wangbenjun5

wangbenjun5   1 天前

go 在 web 方向确实缺少一个全栈的框架,基本上都得自己再攒点东西进去,好处就是简单易懂,门槛低。

cuebyte

cuebyte   23 小时 2 分钟前   ❤️ 2

一把梭 Spring Boot 没话说,然而 Go 的优势在于招人不用卷在语言上:

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

Go 的话相对没那么卷,并发相对简单,任何背景的程序员都可以转 Go 。 招人的时候可以把更多的经历放在架构设计、业务能力和软技能上。

chendy

chendy   22 小时 26 分钟前

java 农,表示啥时候 go 也有个全家桶的框架再去玩

LukeEuler

LukeEuler   21 小时 26 分钟前   ❤️ 1

@UserNameisNull 巧了,我就是 java 转的 go 。从语言和生态上,java 都比 go 强。但是,转 go 的理由也是有的,仅个人理解:写 java 的人不行。没有一个例外,全都不行。这些人成了 java 最大的短板。
简单说明一下:python 2 3 共存了很长时间,阵痛了很长时间。看看现在的 java,简直就是一个无解的 2 3 4 5 6 7 8 。。。版本共存。解决不了这个问题,就是人的问题。

josephok

josephok   21 小时 10 分钟前 via Android

怎么老有人拿 Golang 与 Java 比较? Golang 诞生之初就没有拿 Java 当目标,而是对标 c, c++,语法也更类似 c 语言,号称是“网络时代的 c 语言”。Golang 更适合写一些系统级的应用,而 Java 更适合写业务代码,二者没有可比性。

iPhone9

iPhone9   21 小时 1 分钟前

@josephok 想什么呢?对标 c c++?就 golang 那性能?

rhacker1995

rhacker1995   21 小时 0 分钟前

graalvm,micronaut,quarkus,kotlin 在运原生时代让 go 毫无优势,至少在业务代码方面。

dhssingle

dhssingle   20 小时 55 分钟前

@gaigechunfeng #36 你这是哪的 .net core,要 10 个 G 。

FrankAdler

FrankAdler   20 小时 48 分钟前

你说的这些,只是因为没有一个 spring 这样的框架而已,main 里面拼 init 啥的,也完全可以像 spring 那样隐藏起来,只暴露一个 application run,但是何必呢,为了这些发明各种范式,各种设计模式。
Java 的各种语法糖全用上效果是可以隐藏起来很多细节,这有太多性能损耗和工程复杂性,所以选择能看懂代码都算牛逼的了,结果就是 Java 编程成本不在 Java 上,而是在各种这些东西了,挺奇妙的。

josephok

josephok   20 小时 41 分钟前 via Android

@iPhone9 单拿性能说事?既然是对标,那就是全方位的对标,Golang 在简洁性、编译速度、开发效率、包管理机制上是全面碾压 c++的。

cmdOptionKana

cmdOptionKana   20 小时 35 分钟前   ❤️ 1

@josephok 有 GC 的语言不可能对标 c/c++,对标对标 c/c++就必须强调性能,“简洁性、编译速度、开发效率、包管理”本来就不是 c/c++的强项。

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

另外,golang 官方也从未号称“网络时代的 c 语言”,不负责任的媒体瞎写或网友戏言不可当真。

drackzy

drackzy   20 小时 34 分钟前

目前为止,还没有那么多培训班捣乱。

yangyaofei

yangyaofei   20 小时 17 分钟前 via Android

其实 web 相关的主要矛盾不是项目的性能之类的,而是在怎么让参差不齐的开发人员能共同完成一个项目……

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

都是理查德曼怎么写都行,甚至我自己写在我更愿意用 python,但是人多了水平不能保证的时候,我肯定不会选 python 。

iPhone9

iPhone9   19 小时 55 分钟前

@josephok rust 才是对标 c c++的,golang 就算了吧

shuimugan

shuimugan   15 小时 38 分钟前   ❤️ 1

编译后体积小,冷启动速度快。
在 serverless 架构上,以阿里云为例,允许使用自定义 docker 镜像运行,如果你的镜像体积(压缩后) 100MB 以内,冷启动的时候拉取->解压->运行->就绪的整体消耗在 1~3s,同时单个实例在 1 核 128MB 内存下可以承受 1000 并发(阿里云这点很垃圾,8 核 32G 内存和 1 核 128MB 内存最高的并发都是 100 ),那么服务器(无状态的应用部分)费用会变得及其低(完全按量付费),部署及其无脑,弹性伸缩非常方便。

并发模型简单高效也是一个优势,很多 java web 项目在线上跑,当代码会请求另一个可能耗时的接口时,整体应用稳定性基本处于玄学状态(比如启动分配 200 线程来处理请求,单一接口依赖了一个耗时不稳定的接口,可能要等 5s 才有返回,当这个接口被狂刷时,线程池被打满,其他接口请求进不来,表现就是整个服务都凉了),各种线程池大小配到傻对整体的 QPS 提升也不大,这时就会想各种蹩脚方案了,还不如一个异步模型来得爽快。于是这时候又要进之前关于 java 全异步解决方案里面的帖子里吵了,不如直接换语言。

iseki

iseki   15 小时 12 分钟前

Go 唯一的优势大概就是编译快了,大道至简在 Go 上说好听了是简洁,说难听了就是简陋。
连 Min Max 都要我自己造的“现代语言”,一项目造一份自己的各种混乱的 utils 这个,工程角度上看离 Java 还有一定的距离。
明明好多地方都卡死了使用方式,连 GoroutineID 和对标 Java 上 ThreadLocal 的东西都没有;结果这些基本的函数反倒自由了。

iseki

iseki   15 小时 6 分钟前

@yangyaofei 总觉得这个问题得从两头看,太复杂强大的语言特性必然给水平参差不齐的团队带来麻烦,可是特性和库异常简陋也绝对不会给这种场合带来什么好处

tulongtou

tulongtou   12 小时 57 分钟前   ❤️ 1

@wanguorui123 这有点牵强了,openjdk 不收费的

wanguorui123

wanguorui123   11 小时 4 分钟前 via iPhone

@zorui
@tulongtou
OpenJDK 虽说免费,但开源协议没 Go 友好,两者的宽松度不一样。

wanguorui123

wanguorui123   10 小时 53 分钟前 via iPhone

@zorui
@tulongtou
OpenJDK 的免费是有开源协议限制的,大公司想搞点闭源私货是不太友好的,这个免费是有代价的。

powerman

powerman   10 小时 38 分钟前

@iseki 问题出在工程规模上,当需要大量人合作的时候,肯定是重量级框架来得合适,做监控 日志 权限 等横切业务支撑的人专门做这些,做业务的专门做业务,大部分人只是一个程序员的视角去看待工程问题,所以觉得 golang 简单一把梭来得合适,但是这种工具怎么说呢,你要是 3-5 个人,我觉得用原始一点的工具并没有什么不好,甚至你用 c 语言自己去撸 HTTP 然后配合宏 自己写一套 Server 框架都行,但是你要招上百号人来做项目,那么这就麻烦了,很显然刀耕火种的工具并不适合大团队生产。

tairan2006

tairan2006   10 小时 30 分钟前

目前在写 web 上毫无优势,当然默认性能上可以捶 springboot

当然等 1.18 加了泛型,就变成 Java 毫无优势了

abcbuzhiming

abcbuzhiming   10 小时 10 分钟前

@LukeEuler 你的意思无非就是 go 历史比较短暂时没有历史包袱吗?那将来 go 如果也有了历史包袱咋办?

yangyaofei

yangyaofei   9 小时 55 分钟前 via Android

@iseki 特性和库简陋这个不是很认同,java11 是可以愉快的使用的,spring 很多东西也很适合无脑怼,虽然我才做 java spring 半年多,但是这东西可不算简陋。

但是确实不如原来用的 python,python 两三行,java 要写很多甚至魔改(相信 go 也一样)

即使是简陋的,也要考虑在大家都是半吊子的前提下,那些 go 有之 java 没有的异常强大的不要不要的天神一般的新特性和库带来的收益和我提及的带来的麻烦的大小吧

而且半吊子有时候是超出人的想象的,纯 windows 部署,java 甚至还在用 jsp,jason 数据甚至在用 map 拼……所以 java11 springboot 最新 前后端分离 这些已经精疲力竭了,又不需要日均千万访问什么的

wdlth

wdlth   8 小时 3 分钟前

我觉得如果单纯比 Web 开发的话,Go 和大多数时候围绕 Servlet 的 Java Web 相比是没有什么意义的,毕竟 Java 的是 JSR,是一种标准规范,而 GIN, Beego, Echo 的是民间开发的开源项目,所以你会觉得不同的实现有差异。

但如果你换成与基于 Reactor 的 Spring Cloud Gateway 比较,你也会发现和传统的 Java Web 不一样。

LukeEuler

LukeEuler   6 小时 43 分钟前

@abcbuzhiming 那就继续换。(还是仅代表个人观点)。生产工具还是当下顺手比较好,没有什么永远最好的工具。但是,事倍功半的人,永远都会有。

mmdsun

mmdsun   6 小时 43 分钟前 via Android

转一个大佬点评 go:

go 这个语言在做企业应用时连个备胎都算不上,如果用不了 jvm 系的语言,我跑去抱微软的大腿使用 c# 都不会用 go,当然 node.js 比 go 还辣鸡。

就算想做个能处理高并发的中间件,你发现基于 netty 这种最土的异步事件循环的方案搞出来的东西依然好于吹上天的 goroutine 。

所以,go 这种语言最适合哪种人用呢?适合那种觉得 java 土但是连个 netty 都用不好的跑去二流互联网企业整天吹那点高并发的三流码农。

iseki

iseki   6 小时 42 分钟前 via Android

@yangyaofei 我没说 Java 简陋,我说 go 简陋,等反省能用了,勉强也就和 Java 同台竞技而已。和 Kotlin/Python 比就不用比了

ihciah

ihciah   5 小时 47 分钟前 via iPad

我觉得最难学的语言一个是 java,一个是 javascript 。。。

cnbattle

cnbattle   5 小时 37 分钟前

个人理解 轻量 适合容器化 k8s 友好

gaigechunfeng

gaigechunfeng   5 小时 35 分钟前

@dhssingle 安装 visual studio,然后选择开发素材包。 勾选了 web,就要下 8,9 个 G 的东西啊。

cnbattle

cnbattle   5 小时 32 分钟前

慢慢都在面向 k8s 多语言 架构,spring 成熟的东西只能 java 玩才舒服,当然两者各有利弊,我使用多种语言开发,前者能更好的架构及融合

SorcererXW

SorcererXW   2 小时 53 分钟前

云原生环境下,很多基础工作都可以下沉到基础设施来做,不需要和 Spring 一样在进程内把所用事情都做掉

cmdOptionKana

cmdOptionKana   1 小时 47 分钟前

@gaigechunfeng 这个锅 .net 还真不背,我去官方网站看了教程,完全没有说需要 visual studio

cuebyte

cuebyte   1 小时 43 分钟前

@mmdsun 字节跳动和 B 站用 Go 多少年了,市值百亿美金,看来你说的大佬也没有那么牛。。

EIJAM

EIJAM   1 小时 9 分钟前 via iPhone

@mmdsun 这年头什么玩意都能算大佬啊。字节,逼站,知乎用 go 开发也没听说啥问题吧

TypeErrorTypeError   53 分钟前

@mmdsun go 又不是只能 goroutine,自己实现的异步事件循环都不少了,goroutine 本来就是为了方便易用的权衡,才采用当前方案,
Java 吹得再好,也没看到取代 k8s 这一套生态的作品来啊,好像 spring cloud 那一套反而有被取代的趋势,
这种大佬论调也不过是无脑吹而已

wqtacc

wqtacc   37 分钟前

在云原生都快被吹爆的时代,你们还在强调超大型项目,简直自寻死路

xliao

xliao   12 分钟前

又一吵架帖,这是服了。一个公司选什么语言难道不是得考虑公司团队技术栈?主要技术栈是 java 的团队你去选个 go web 框架那估计能把公司干黄

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK