最近接手一个 go 的项目,gin 框架写的,main.go 各种 init 手工拼接日志、路由、orm 、grpc 等,c *context 之类的指针满天飞,日志都得自己定义,还定义的乱七八糟,相比 spring 一把梭一点都不顺滑啊,所以,很多项目转 go 是为了个啥?就为了省那么点内存?
1
acrisliu 2021-09-11 13:14:53 +08:00 via iPhone
启动速度也是优势
|
2
sunny352787 2021-09-11 13:30:50 +08:00 12
用 go 的第一件事,开骂,很正常
|
3
sagaxu 2021-09-11 13:31:50 +08:00 via Android 6
启动速度
内存占用 打包体积 交叉编译 框架简洁 |
4
wellsc 2021-09-11 13:32:21 +08:00 via iPhone 6
点 netcore 现在结合了两者的优点,还是没人用
|
5
yeqizhang 2021-09-11 13:38:54 +08:00 via Android
个人比较喜欢的是 go 打包成单个执行文件,交叉编译。
使用过一些项目就是引用 github 的依赖包比较烦…… |
6
wangxn 2021-09-11 13:39:47 +08:00 2
原生语言,直接编译到机器码
内建 goroutine,有 GC 无运行时,直接一个可执行文件走起,部署极其简单 现代化,内建包管理 现代化,官方提供 laguange server/lint/formater 等一系列用来写 IDE 和编辑器的工具 语法简单,作者也是 C 的作者,爹是 Google |
7
yinzhili 2021-09-11 13:41:14 +08:00
目的可能是提高门槛
|
8
ChrisFreeMan 2021-09-11 13:41:33 +08:00 3
我个人喜欢的 go 语言的点,特性简单,对比其他的编译型语言,没有那么多杂七杂八让人难懂的东西,工程目录对比 C#项目简洁太多。跨平台兼容性非常棒,对比 Pyhton 简直好太多,又快兼容性又好。能做的东西很多,后端,前端,游戏开发,脚本。运行简单,编译简单。我真的找不到比这个更适合拿来做个人开发更好的语言了
|
10
iRiven 2021-09-11 13:45:06 +08:00
是的,开发 web 应用没有 Java spring 来的舒服
|
11
CEBBCAT 2021-09-11 13:45:11 +08:00 via Android
Go 简单,编译快,部署方便。如果项目实在太乱,最好先考虑考虑是不是写代码的人需要提升
刚刚切换语言、项目会有一段阵痛期,捱一捱就好了 |
12
Vegetable 2021-09-11 13:55:34 +08:00 2
我很迷惑,init 拼接就比 xml 差?
|
13
Vegetable 2021-09-11 13:59:56 +08:00 16
起码你一个 java 开发者,拿到这个项目之后,没有说看不懂。反过来没写过 java 的人去接手一个 spring 项目,能直接吐出来。
|
14
Bazingal 2021-09-11 14:02:37 +08:00
除了编译快,好像也没什么了,大家都用 docker 了,部署都是一样的,管你单文件还是多文件,至于内存占用,这个不能只看刚启动的内存,得看使用过程的内存占用
|
15
6IbA2bj5ip3tK49j 2021-09-11 14:04:16 +08:00 3
CRUD 用 Go 写就是为难自己,但是写中间件,写一个工具就很方便。
|
16
q447643445 2021-09-11 14:05:22 +08:00 5
个人对 编译成 native 天生有好感
|
17
SuperManNoPain 2021-09-11 14:06:58 +08:00 1
历史的轮回罢了,老东西大家就想换新,😅
|
18
lysS 2021-09-11 14:14:28 +08:00
你这也不能全怪 go 啊,这明明是框架约束性不同导致的;当然你也可以说 go 生态不行、没有个 spring 一样的框架
|
19
eric96 2021-09-11 14:21:25 +08:00
没用过 go,但你提的这些问题,我觉得是生态问题,没有好用的轮子,所以自由发挥
|
20
wanguorui123 2021-09-11 14:27:36 +08:00 via iPhone
Go 免费、JAVA 收费
|
22
UserNameisNull 2021-09-11 14:39:05 +08:00
@sunny352787 第二件事,继续开骂,
然后不得不接受公司的现实。 |
23
Takamine 2021-09-11 14:40:54 +08:00 via Android 1
对中大型企业级应用来说,go web 目前毫无优势。
|
24
UserNameisNull 2021-09-11 14:44:07 +08:00
没有一个在做真正的对比,感觉都是从 C 转到 Go 的。
优势劣势,你说的很清楚了,很赞同。 你见过 java 项目转 go 吗?肯定没有的。 要么是 python 项目转 go,php 转 go,c 转 go,这群人对于 java 不了解,甚至鄙视,那就只能选择 go 了,运行效率高,开发效率极差。 |
26
UserNameisNull 2021-09-11 14:54:23 +08:00
@Takamine 赞同
|
27
agagega 2021-09-11 15:05:52 +08:00
代码简洁和语法概念少,这两个是矛盾的呀
|
29
charlie21 2021-09-11 15:34:15 +08:00
一个猜想,不一定对:
给你一种用 xxx 就是王道的幻觉。若几年之后 xxx 人才饱和了,你是不是已经赚够五百万了还要转回 java 阿? 其实根本就是 java 太卷了,卷到让创建岗位的人能开出的好岗位太少了,奔个人少钱多所以转行去写 xxx,沧海桑田赚个快钱而已。 同样的情况,让写 delphi 也会有人去,让写什么 foolang 或 COBOL 也会有人去,只不过写 COBOL 的那群人不上网而已 岗位多钱也多,这就是风头,这不可持续。这是一个真空球形鸡的猜想,上文的 xxx 可以是 golang 也可以是 iOS,可 golang 创造的岗位不会比 iOS 更多吧?参考当年的 iOS 大牛的故事 贵站搜 iOS 离婚 |
30
zorui 2021-09-11 15:38:29 +08:00
@wanguorui123 没在点上。。open jdk 也很香。
|
31
Cbdy 2021-09-11 15:49:15 +08:00
如果原来的系统不是 Go 写的,可以用 Go 重构
|
32
iyaozhen 2021-09-11 16:03:36 +08:00
go 对 java 有优势
但 go web 和 spring 完全不能比,项目做多了就喜欢标准化的(不需要纠结选啥库,更多精力做业务),spring 写的再差也中规中矩,go web 的话能写出花,还是希望框架统一点(事实上公司内部是统一的,用起来还是很舒服)。 |
33
iyear 2021-09-11 16:18:09 +08:00
go web 和 spring 咋比。。要说也是说 go 的生态还不太完善,没有类似 spring 的重量级框架
|
34
cmdOptionKana 2021-09-11 16:25:56 +08:00
Java 转 Go 本来就不多吧?反而 Python 、PHP 转 Go 比较多。
|
35
zxCoder 2021-09-11 16:42:20 +08:00
.net 也能打包单文件
|
36
gaigechunfeng 2021-09-11 16:56:58 +08:00
@wellsc .net core 我倒是尝试过一段时间。一开始就下载安装 10 个 g 的素材包,有点劝退。
|
37
hutoer 2021-09-11 17:01:12 +08:00 2
Java spring 是工业级的
go web 是个人级的 |
38
magicdu 2021-09-11 17:17:40 +08:00
我搞 java 的,没用过 go 写 web,刚开始学,写了个和公司手环交互的通信代理,感觉可以,用起来比 java 简单,轻量
|
39
tydl 2021-09-11 17:34:23 +08:00 via Android 1
我爱 php,php 天下第一
|
40
AllenHua 2021-09-11 17:41:57 +08:00 1
那期待有人来给 go 来个 Summer 框架(对标 Java Spring )吧 🐶️
|
41
ToBeHacker 2021-09-11 17:51:16 +08:00 1
golang 在工程领域称王称霸已经是趋势了
|
42
zjsxwc 2021-09-11 17:56:25 +08:00 via Android 1
|
43
DeWjjj 2021-09-11 17:56:43 +08:00 1
那种文件直接过去不要依赖的感觉是真他妈爽。
|
44
wangbenjun5 2021-09-11 18:22:58 +08:00
go 在 web 方向确实缺少一个全栈的框架,基本上都得自己再攒点东西进去,好处就是简单易懂,门槛低。
|
45
cuebyte 2021-09-11 21:05:27 +08:00 3
一把梭 Spring Boot 没话说,然而 Go 的优势在于招人不用卷在语言上:
Java 的 Collections,并发,JVM,代码风格都要考... 没有个 2 年经验都不敢要。公司招人的时候自己也够喝一壶的。 Go 的话相对没那么卷,并发相对简单,任何背景的程序员都可以转 Go 。 招人的时候可以把更多的经历放在架构设计、业务能力和软技能上。 |
46
chendy 2021-09-11 21:41:54 +08:00
java 农,表示啥时候 go 也有个全家桶的框架再去玩
|
47
LukeEuler 2021-09-11 22:41:46 +08:00 1
@UserNameisNull 巧了,我就是 java 转的 go 。从语言和生态上,java 都比 go 强。但是,转 go 的理由也是有的,仅个人理解:写 java 的人不行。没有一个例外,全都不行。这些人成了 java 最大的短板。
简单说明一下:python 2 3 共存了很长时间,阵痛了很长时间。看看现在的 java,简直就是一个无解的 2 3 4 5 6 7 8 。。。版本共存。解决不了这个问题,就是人的问题。 |
48
josephok 2021-09-11 22:58:15 +08:00 via Android
怎么老有人拿 Golang 与 Java 比较? Golang 诞生之初就没有拿 Java 当目标,而是对标 c, c++,语法也更类似 c 语言,号称是“网络时代的 c 语言”。Golang 更适合写一些系统级的应用,而 Java 更适合写业务代码,二者没有可比性。
|
50
rhacker1995 2021-09-11 23:07:35 +08:00
graalvm,micronaut,quarkus,kotlin 在运原生时代让 go 毫无优势,至少在业务代码方面。
|
51
dhssingle 2021-09-11 23:12:57 +08:00
@gaigechunfeng #36 你这是哪的 .net core,要 10 个 G 。
|
52
FrankAdler 2021-09-11 23:19:48 +08:00
你说的这些,只是因为没有一个 spring 这样的框架而已,main 里面拼 init 啥的,也完全可以像 spring 那样隐藏起来,只暴露一个 application run,但是何必呢,为了这些发明各种范式,各种设计模式。
Java 的各种语法糖全用上效果是可以隐藏起来很多细节,这有太多性能损耗和工程复杂性,所以选择能看懂代码都算牛逼的了,结果就是 Java 编程成本不在 Java 上,而是在各种这些东西了,挺奇妙的。 |
53
josephok 2021-09-11 23:27:05 +08:00 via Android
@iPhone9 单拿性能说事?既然是对标,那就是全方位的对标,Golang 在简洁性、编译速度、开发效率、包管理机制上是全面碾压 c++的。
|
54
cmdOptionKana 2021-09-11 23:33:05 +08:00 1
@josephok 有 GC 的语言不可能对标 c/c++,对标对标 c/c++就必须强调性能,“简洁性、编译速度、开发效率、包管理”本来就不是 c/c++的强项。
比如小明数学考试 99 分,英语考试 59 分,对标小明的意思就不可能看小明的英语能力。 另外,golang 官方也从未号称“网络时代的 c 语言”,不负责任的媒体瞎写或网友戏言不可当真。 |
55
drackzy 2021-09-11 23:33:39 +08:00
目前为止,还没有那么多培训班捣乱。
|
56
yangyaofei 2021-09-11 23:50:41 +08:00 via Android
其实 web 相关的主要矛盾不是项目的性能之类的,而是在怎么让参差不齐的开发人员能共同完成一个项目……
一个语言或者框架好不好,并不是只看他的性能和是否容易实现之类的,而也要考虑不同的开发人员实现的效果是否比较一直。 都是理查德曼怎么写都行,甚至我自己写在我更愿意用 python,但是人多了水平不能保证的时候,我肯定不会选 python 。 |
58
shuimugan 2021-09-12 04:29:40 +08:00 1
编译后体积小,冷启动速度快。
在 serverless 架构上,以阿里云为例,允许使用自定义 docker 镜像运行,如果你的镜像体积(压缩后) 100MB 以内,冷启动的时候拉取->解压->运行->就绪的整体消耗在 1~3s,同时单个实例在 1 核 128MB 内存下可以承受 1000 并发(阿里云这点很垃圾,8 核 32G 内存和 1 核 128MB 内存最高的并发都是 100 ),那么服务器(无状态的应用部分)费用会变得及其低(完全按量付费),部署及其无脑,弹性伸缩非常方便。 并发模型简单高效也是一个优势,很多 java web 项目在线上跑,当代码会请求另一个可能耗时的接口时,整体应用稳定性基本处于玄学状态(比如启动分配 200 线程来处理请求,单一接口依赖了一个耗时不稳定的接口,可能要等 5s 才有返回,当这个接口被狂刷时,线程池被打满,其他接口请求进不来,表现就是整个服务都凉了),各种线程池大小配到傻对整体的 QPS 提升也不大,这时就会想各种蹩脚方案了,还不如一个异步模型来得爽快。于是这时候又要进之前关于 java 全异步解决方案里面的帖子里吵了,不如直接换语言。 |
59
iseki 2021-09-12 04:55:39 +08:00
Go 唯一的优势大概就是编译快了,大道至简在 Go 上说好听了是简洁,说难听了就是简陋。
连 Min Max 都要我自己造的“现代语言”,一项目造一份自己的各种混乱的 utils 这个,工程角度上看离 Java 还有一定的距离。 明明好多地方都卡死了使用方式,连 GoroutineID 和对标 Java 上 ThreadLocal 的东西都没有;结果这些基本的函数反倒自由了。 |
60
iseki 2021-09-12 05:01:23 +08:00
@yangyaofei 总觉得这个问题得从两头看,太复杂强大的语言特性必然给水平参差不齐的团队带来麻烦,可是特性和库异常简陋也绝对不会给这种场合带来什么好处
|
61
tulongtou 2021-09-12 07:10:26 +08:00 2
@wanguorui123 这有点牵强了,openjdk 不收费的
|
62
wanguorui123 2021-09-12 09:04:13 +08:00 via iPhone
|
63
wanguorui123 2021-09-12 09:15:02 +08:00 via iPhone
|
64
powerman 2021-09-12 09:29:31 +08:00
@iseki 问题出在工程规模上,当需要大量人合作的时候,肯定是重量级框架来得合适,做监控 日志 权限 等横切业务支撑的人专门做这些,做业务的专门做业务,大部分人只是一个程序员的视角去看待工程问题,所以觉得 golang 简单一把梭来得合适,但是这种工具怎么说呢,你要是 3-5 个人,我觉得用原始一点的工具并没有什么不好,甚至你用 c 语言自己去撸 HTTP 然后配合宏 自己写一套 Server 框架都行,但是你要招上百号人来做项目,那么这就麻烦了,很显然刀耕火种的工具并不适合大团队生产。
|
65
tairan2006 2021-09-12 09:38:13 +08:00
目前在写 web 上毫无优势,当然默认性能上可以捶 springboot
当然等 1.18 加了泛型,就变成 Java 毫无优势了 |
66
abcbuzhiming 2021-09-12 09:57:30 +08:00
@LukeEuler 你的意思无非就是 go 历史比较短暂时没有历史包袱吗?那将来 go 如果也有了历史包袱咋办?
|
67
yangyaofei 2021-09-12 10:13:03 +08:00 via Android
@iseki 特性和库简陋这个不是很认同,java11 是可以愉快的使用的,spring 很多东西也很适合无脑怼,虽然我才做 java spring 半年多,但是这东西可不算简陋。
但是确实不如原来用的 python,python 两三行,java 要写很多甚至魔改(相信 go 也一样) 即使是简陋的,也要考虑在大家都是半吊子的前提下,那些 go 有之 java 没有的异常强大的不要不要的天神一般的新特性和库带来的收益和我提及的带来的麻烦的大小吧 而且半吊子有时候是超出人的想象的,纯 windows 部署,java 甚至还在用 jsp,jason 数据甚至在用 map 拼……所以 java11 springboot 最新 前后端分离 这些已经精疲力竭了,又不需要日均千万访问什么的 |
68
wdlth 2021-09-12 12:05:04 +08:00
我觉得如果单纯比 Web 开发的话,Go 和大多数时候围绕 Servlet 的 Java Web 相比是没有什么意义的,毕竟 Java 的是 JSR,是一种标准规范,而 GIN, Beego, Echo 的是民间开发的开源项目,所以你会觉得不同的实现有差异。
但如果你换成与基于 Reactor 的 Spring Cloud Gateway 比较,你也会发现和传统的 Java Web 不一样。 |
69
LukeEuler 2021-09-12 13:24:52 +08:00
@abcbuzhiming 那就继续换。(还是仅代表个人观点)。生产工具还是当下顺手比较好,没有什么永远最好的工具。但是,事倍功半的人,永远都会有。
|
70
mmdsun 2021-09-12 13:25:01 +08:00 via Android 1
转一个大佬点评 go:
go 这个语言在做企业应用时连个备胎都算不上,如果用不了 jvm 系的语言,我跑去抱微软的大腿使用 c# 都不会用 go,当然 node.js 比 go 还辣鸡。 就算想做个能处理高并发的中间件,你发现基于 netty 这种最土的异步事件循环的方案搞出来的东西依然好于吹上天的 goroutine 。 所以,go 这种语言最适合哪种人用呢?适合那种觉得 java 土但是连个 netty 都用不好的跑去二流互联网企业整天吹那点高并发的三流码农。 |
71
iseki 2021-09-12 13:25:38 +08:00 via Android
@yangyaofei 我没说 Java 简陋,我说 go 简陋,等反省能用了,勉强也就和 Java 同台竞技而已。和 Kotlin/Python 比就不用比了
|
72
ihciah 2021-09-12 14:20:38 +08:00 via iPad
我觉得最难学的语言一个是 java,一个是 javascript 。。。
|
73
cnbattle 2021-09-12 14:30:49 +08:00
个人理解 轻量 适合容器化 k8s 友好
|
74
gaigechunfeng 2021-09-12 14:33:04 +08:00
@dhssingle 安装 visual studio,然后选择开发素材包。 勾选了 web,就要下 8,9 个 G 的东西啊。
|
75
cnbattle 2021-09-12 14:35:32 +08:00
慢慢都在面向 k8s 多语言 架构,spring 成熟的东西只能 java 玩才舒服,当然两者各有利弊,我使用多种语言开发,前者能更好的架构及融合
|
76
SorcererXW 2021-09-12 17:15:11 +08:00
云原生环境下,很多基础工作都可以下沉到基础设施来做,不需要和 Spring 一样在进程内把所用事情都做掉
|
77
okampfer 2021-09-12 17:46:21 +08:00
@gaigechunfeng #74
那是 visual studio 的问题,不是.net core 的问题啊。我在官网( https://dotnet.microsoft.com/download/dotnet/5.0 )下载的.net core for linux,解压缩了也才 405MB 。 |
78
cmdOptionKana 2021-09-12 18:21:04 +08:00
@gaigechunfeng 这个锅 .net 还真不背,我去官方网站看了教程,完全没有说需要 visual studio
|
81
TypeError 2021-09-12 19:14:44 +08:00
@mmdsun go 又不是只能 goroutine,自己实现的异步事件循环都不少了,goroutine 本来就是为了方便易用的权衡,才采用当前方案,
Java 吹得再好,也没看到取代 k8s 这一套生态的作品来啊,好像 spring cloud 那一套反而有被取代的趋势, 这种大佬论调也不过是无脑吹而已 |
82
wqtacc 2021-09-12 19:31:06 +08:00
在云原生都快被吹爆的时代,你们还在强调超大型项目,简直自寻死路
|
83
xliao 2021-09-12 19:55:20 +08:00
又一吵架帖,这是服了。一个公司选什么语言难道不是得考虑公司团队技术栈?主要技术栈是 java 的团队你去选个 go web 框架那估计能把公司干黄
|
84
passer9527 2021-09-12 20:55:26 +08:00 via iPhone
@xliao 因为这种原因小公司被技术人员搞死的不少。多数见于大厂垃圾去小公司,还觉得自己了不起完了。用大厂那套瞎搞。小公司被搞死了,老大还觉得是自己问题。笑死
|
87
wowbaby 2021-09-13 08:52:05 +08:00
我用了一段时间,然后退了,go 写 web,个人感觉是自找没趣,耗费自己的身体,web 还是 PHP 有大优势,然性能瓶颈基本不在语言上,最近发现 dotnet core web 开发也很强,但感觉国内用的好少。
|
88
jingslunt 2021-09-13 10:02:27 +08:00
开机即用 不用装 jdk
文件小 |
89
sanggao 2021-09-13 10:15:03 +08:00 1
golang 本想做 21 世纪的 c 语言,却做了 21 世纪的 php
|
90
ninjashixuan 2021-09-13 10:32:44 +08:00
@mmdsun 这个语言风格有点像微博上自己开发数据库的 4k 哥
|
91
LoNeFong 2021-09-13 14:12:09 +08:00
@Vegetable 我也是这种感觉, 大多 web 开发者拿到 go 项目感觉能看看 7788, 但是直接让他去撸 spring 我感觉启动都费劲
|
92
LoNeFong 2021-09-13 14:14:44 +08:00
@rhacker1995 所以有人用么, 17 都要发布了, 大家还在守着 8.
|
94
Hanggi 2021-09-13 14:58:36 +08:00 via iPhone
标题已经说明一些问题了,go web 和 Java spring 。
数据证明 Java 离开 spring 的话 63%的应用场景就没了。 |
95
gam2046 2021-09-13 15:23:35 +08:00
从语言看,我觉得.net 力压所有其他,只可惜微软爸爸不给力。剩下的矬子里拔高个,就是 Java 了。
Java 最大的特点是下限很高,一群水平一般的人,写出来的东西,凑合也能用,虽然上不了高并发,但满足个百人、千人的访问是问题不大的。 而企业最需要的就是这样的东西,牛人是少数,平庸的才是大多数。而其他语言的上限比 Java 高很多,可下限也很低,非常依赖开发人员水平。 |
96
Euthpic 2021-09-13 20:26:59 +08:00 via Android
楼里有头条的朋友吗
|
98
Rorysky 2021-09-14 15:23:01 +08:00
编程语言的江山已经划定了;下一次群雄纷争,割鹿中原的时候必然是 整个 行业发生了巨大的变化,才会产生新的需求,新的英雄,新的王国。
web 开发领域:java,别的可以用,但这个最多最稳; 数据科学领域:python,语法简单,高性能交给底层的 c/c++ fortran 高性能领域:c/c++,所有需要变态性能的地方,优先考虑; rust 行不行,rust 还没有太成气候; 交互界面领域:javascript,不要什么 qt 劳什子,交互就是 js 一把梭,天生就是干这个的; 需要思考的领域 未来 vr/ar 需要大量调用 图形库的时候,我估摸着还是 js ; go 适合 非 web 中间件方向,这也是 字节使用场景吧 |