之前一直用的 java 写 crud ,最近有项目要用 Go 写,然后我就用了 Go 尝试写了一个 web 程序
但是体验下来,其实开发体验并不怎么高,比如脚手架,虽然有很多现成的,但是我更希望有一种规范或者 interface ,就算是 java 多年前的纯 spring+servlet ,也会提供各种 interface 去规范。这样起码可以保证接手或者同时维护的人能够更快的理解和上手。
开发体验类似写命令行程序,从 main 函数一点点往上加功能,写了一天,看了一天文档,我才把 gin+gorm+zap+viper 配置好,花时间去组合。
crud 方面就不说了,还是比较原始,或者有什么奇淫巧计我不知道的。
上面说的几点只是我简单用了几天,感知比较大的几点。
其实上面说的同样可以放在其他语言上,我也不是对 Go 有什么偏见,而是觉得 GO 这么火,越来越多的互联网公司用来支撑业务,照理来说生态和体验跟其他小众语言不是一个量级的了,但是用起来还是有些失望。
1
lscho 2022-01-21 14:14:12 +08:00 11
“虽然有很多现成的,但是我更希望有一种规范或者 interface”
感觉是写 java 写多的后遗症。 |
2
Hanggi 2022-01-21 14:17:02 +08:00 2
这就是典型的告诉你该怎么做就怎么做,突然放开手脚就不知所措了。
你依然可以使用 Java 的那套开发模式去写 Go ,就是要理解下 Go interface 的一些特别之处。 |
3
murmur 2022-01-21 14:19:43 +08:00
这不是 interface 的问题,是 spring 的生态太庞大了,java 的 web 东西稍微凑一下都能凑近 spring 里
|
4
Qseven 2022-01-21 14:20:31 +08:00 25
面向过程,流水账,一把梭,十个工程十个样,是不是这感觉?
|
5
binbinyouliiii OP |
6
keepeye 2022-01-21 14:24:35 +08:00
继续回去用 java 框架就是了,也不指望你接触几天就能改变思维习惯
|
7
lscho 2022-01-21 14:26:03 +08:00
@binbinyouliiii 感觉不是不同喜好的问题,是只有 java 有这种大一统的框架,学 java 的人都会这个,所以换个人可以快速接受。别的语言没有这种大一统的框架,用什么的都有,所以看上去比较乱。
其实好不好维护看是看文档的,如果 golang 项目写的比较规范,同时文档齐全,换个人也可以很快理解上手。 |
8
Mark3K 2022-01-21 14:26:35 +08:00
那是因为你项目太小了,仅包括一些 CRUD ,打点的项目中 CRUD 和 HTTP 接口只是其中很小一块
|
9
Mark3K 2022-01-21 14:27:35 +08:00 1
|
11
liuxu 2022-01-21 14:30:36 +08:00
你写过 rust ,但是你觉得 go web 开发体验倒退了? rust 什么项目发出来我看看
|
12
anzu 2022-01-21 14:32:35 +08:00
可能其它公司关注的不是开发体验
|
13
binbinyouliiii OP @liuxu #11 见我最后一句话,现在人戾气这么重?
|
14
chevalier 2022-01-21 14:37:28 +08:00 16
Javaer ? ❌
Springer ✅ |
15
binbinyouliiii OP @Mark3K #8 emm...我觉得业务逻辑用什么语言写都差不多,不知道你说的大项目指什么
|
16
wonderfulcxm 2022-01-21 14:40:46 +08:00 via iPhone
正常,当你对一种新语言了解不够,本能的用熟悉的语言去套。很多人夸口一周甚至更短时间掌握一门语言,事实上掌握的只是语法。思维还没转过来,只会写出像 Java 一样的 go 代码,像 js 一样的 PHP 代码。
要多久才能掌握一门语言,有个我订阅的 YouTuber 说,至少用这门语言做五个不同项目。而且不是 hello world 级别的。 |
17
NoDocCat 2022-01-21 14:43:09 +08:00 2
请尝试说服自己: 大道至简.
如果你没有说服, 说明你不是目标用户 |
18
ytmsdy 2022-01-21 14:43:38 +08:00 3
java 最大的优势是规范,就算写的人水平再参差不齐,写出来的代码,不会太飘逸。大企业,大团队用这玩意儿确实有优势。毕竟顺利完成项目,并且项目可维护才是最重要的。
Go ,Python 这一类动态语言,就很考验写代码人的水平,以及写代码人的自律规范。代码飘逸起来,各种花式语法,后续维护,以及优化是一个很大的问题。但是重点是快,小团队,个人开发者用这玩意儿挺好。毕竟对个人开发者来说,效率是第一的! |
19
monkeyWie 2022-01-21 14:45:30 +08:00 6
go 写业务代码就是难受,楼上一堆解释原因的真的是不是没写过复杂业务,但凡用过 java springboot 都知道 go 写业务多恶心吧,我自己也用 go 但是只写网络相关的东西,这才是 go 的方向
|
20
binbinyouliiii OP @wonderfulcxm #16 其实我初上手一个新语言 web 项目,我更想知道最佳实践是什么,因为这个项目不光是我一个人维护,现在看起来很多 Go web 不同项目都有自己不同的风格。
|
21
mosfet 2022-01-21 14:52:16 +08:00
搞嵌入式 C 的
现在尝试一些跑 linux 上的服务用 go 写,毫无违和感... |
23
6IbA2bj5ip3tK49j 2022-01-21 15:08:03 +08:00 3
Golang 写业务 /CRUD 就是不行。
1 ,没有泛型就没有好的集合类。 2 ,再加上很多函数都要 return err ,导致很难把一串操作给连起来。 |
24
wanguorui123 2022-01-21 15:13:59 +08:00
自己造个 Go 的轮子就好了
|
25
ren2881971 2022-01-21 15:21:41 +08:00 1
Go 的隐式实现、隐式继承真的是对初学者一点不友好。。。 写 java 出身的,想完全看懂一个 go 的开源项目真的好难。。。。
|
26
huiyifyj 2022-01-21 15:26:42 +08:00
javaer 吐槽 go 月经贴
|
27
Jooooooooo 2022-01-21 15:27:56 +08:00 4
我感觉 java 上 web 开发已经真正做到只用关心业务逻辑, 框架层面极少关心.
(这才是真正好用的语言啊 |
28
iyear 2022-01-21 15:53:36 +08:00 via Android 1
我很喜欢 go ,但是 go 写业务是真的麻烦,这点真的得承认,我自己写的很烦。
但是写中间件和各种网络工具,分发是真的爽 |
29
swim2sun 2022-01-21 16:02:05 +08:00
其实你是习惯了 Spring 帮你抽象好的那些概念,controller, service, repository...
于是当你需要自己去抽象一些东西的时候你才会这么无所适从,go 应该也有一些框架帮你抽象好了很多东西,但你需要投入时间去理解 |
30
sagaxu 2022-01-21 16:04:09 +08:00 via Android 1
大道至简,写的不舒服,一定是需求提的不好,不够优雅
|
31
zhangchongjie 2022-01-21 16:07:52 +08:00
@Jooooooooo java web 方面的生态基本上都是现成的了,现在的集成框架基本业务 都不怎么写了
|
32
binbinyouliiii OP @swim2sun #29 这些分层不是 spring 的概念,是 web 的概念,只是在 java web 上大家都遵循这个分层
|
33
liuxu 2022-01-21 16:14:08 +08:00
@binbinyouliiii 现在的人发帖都这么带有偏见?喜欢带节奏?
|
34
binbinyouliiii OP @liuxu #33 我只是作为 javer ,实际用 Go 的感觉,到你这就是带节奏?难道不是你见不得别说 Go 一丁点不好?
|
35
theodoreshuai 2022-01-21 16:18:29 +08:00 6
为什么我感觉评论区战火纷飞
┬┴┬┌─ ●─┬─ │─┼─┐ ●├─┤○ ┴┬┴├┬ ┌─┼─ │◎ │ │ ○└┬┘● ─┼─││ │ │ ││─┴─┴ ──┼── ●│○││ ┴─┼─ │○ ● / │ \ |
36
binbinyouliiii OP @theodoreshuai #35 大家都会对自己最熟悉的语言下意识的维护,我也写过其他语言,我能理解现在的流行语言都有自己的流行场景,而且我说的都没有跟语言特性相关的,都是 web 生态和开发体验。
目前 Go 的场景明显是跟 Java 有很大重合的,既然场景有重合那我对比也没有问题。 |
37
SenLief 2022-01-21 16:25:51 +08:00 1
其实你换个思想,如果 java 不让你用 spring ,而是让你自己实现,你还会不会觉得 java 更容易?
go 目前就是万花筒,没有什么是统一的,所以实现上也是千奇百怪,哎。 |
38
offswitch 2022-01-21 16:26:21 +08:00 3
Go 反正我不觉得开发效率高,tmd 一堆 if err := ; err != nil ,就很反人类了
|
39
binbinyouliiii OP @SenLief #37 你说的我知道,所以我说其他小众语言也一样,我是以 Go 目前火热程度和生态丰富性做前提,来比较的。
|
40
binbinyouliiii OP @offswitch #38 我觉得 Rust 的“?”的设计可以放在这上面,但是好像大家并不感冒?
|
41
leafre 2022-01-21 16:35:30 +08:00 26
楼主说的很客观,结果下面一堆 GOer 戾气
|
42
SenLief 2022-01-21 16:35:44 +08:00 1
@binbinyouliiii 是啊,写的如果没有标注好的文档,看都看不懂。这点还不如 python 。至少 django 还能一把梭。
|
43
gouflv 2022-01-21 16:43:09 +08:00 via iPhone 1
当年拿 express 硬写 crud 的时候,也是这种情况
|
44
sampeng 2022-01-21 16:44:04 +08:00
rust 的?的设计在层次深了之后也蛮讨厌。。。每格错误类都要做类型转换
|
45
ragnaroks 2022-01-21 16:44:30 +08:00
spring 比较完善导致了你的错觉,这个其实就类比于有人只会写 "VUE" 不会 javascript
|
46
fenglangjuxu 2022-01-21 16:45:09 +08:00
虽然 我不懂 java 但是你说的对 golang 有点像积木 被人搭建出各种各样的 模型
|
47
ClarkAbe 2022-01-21 16:47:43 +08:00
讲道理一般写 golang 除了某些要多种未知类型输入和返回的场景会用 interface.......crud 谁用了 interface 而不是 struct 定义和约束的话内心骂死他........而且并不是一定得在 main 函数上加.....init()了解一下
|
48
binbinyouliiii OP @sampeng #44 "目前一般认为对于应用程序推荐使用 anyhow ,而对于库推荐使用 thiserror",Rust 一般用这两个
|
49
wizzer 2022-01-21 16:52:08 +08:00
https://budwk.com 值得一试~
|
50
cmdOptionKana 2022-01-21 16:56:37 +08:00
如果已经熟悉了 Java ,再转过来用 Go ,那自然各种不顺。
但是,如果完全零基础的两个人,学 Go 上手应该会比学 Java 轻松一点。 |
51
binbinyouliiii OP @ragnaroks #45 我觉得 Spring 的出现是必然的,没有 Spring 也会有叫 Summer 的框架,很多人嫌 Java 穷设计贼多,我觉得人只要一多,必须要有限制和设计来规范,我开始也是嫌烦,但是代码写多了,就能理解为什么会出现这么多设计,Spring 只是其中一种,Java WEB 目前的路都是前人一步步走出来的,我觉得没有任何问题。
说到正题,早些年刚学 Java WEB 的时候,其实人均手操 servlet ,不比现在的 Go 简单多少。 |
52
sampeng 2022-01-21 17:00:09 +08:00
@binbinyouliiii 没错。是解决了转换的问题。但在代码的语意上发生了太多变化。其实这个设计本身倒没什么问题。我理解这样设计的原因是 rust 要求在于,请设计好自己的 Error 层次。其实看一些优秀开源代码,是都是自己设计好 Error 。。。
|
53
sampeng 2022-01-21 17:01:04 +08:00 1
我其实个人更倾向于 rust 要比 golang 更适合 web 开发。工程性要比 golang 强。1 年前写的 rust 。现在再去看是看得懂的。golang ? what the fuck ,这个逻辑是干啥,那个逻辑头和尾在哪。。。
|
54
sampeng 2022-01-21 17:02:50 +08:00
@binbinyouliiii 说到正题。。现在的 jave 开发不如说是 spring 开发。。。这是一个很矛盾的事。我倒觉得无所谓,业务要用什么就用什么。反正自己每有决定用什么语言的权利
|
55
potatowish 2022-01-21 17:05:13 +08:00 via iPhone
已经是 java 的形状了
|
56
liuxu 2022-01-21 17:08:01 +08:00
@binbinyouliiii 你拿 spring 对比 gin ,gin 的设计理念就是保证轻量原始,让 go web 框架更 golang ,而不是像别的语言,然后你得出 go web 体验倒退了
我建议你手写 servlet jsp 和 gin 对比,再得出 java 和 golang 哪个更适合 web 开发 |
57
liuxu 2022-01-21 17:10:44 +08:00 1
而且你这个标题“Javaer 用了一下 Go web 开发,感觉开发体验倒退了”,就是带 java 和 golang 的节奏,非常明确
|
58
binbinyouliiii OP @liuxu #57 哦?那您认为怎么起标题能够表达出我的意思且不算带节奏呢?
|
59
QAO 2022-01-21 17:21:38 +08:00
你自己都说“就算是 java 多年前的纯 spring+servlet ,也会提供各种 interface 去规范”了,哪种语言都可以有或者没有“规范”,只是你适应了 java 那套而已
楼上说了很多 java 和 go 的对比,我基本都认同,特别是开发业务代码的效率,但都不是你这种情况呀 承认是因为自己没法短时间从旧思维跳出来就这么难吗? |
60
binbinyouliiii OP @liuxu #56 那你可以告诉我可以媲美 Java web 生态的 Go web 组件嘛?我本身就要用,你要是反驳我,建议拿出可以提升我所谓的“开发体验”的产品出来。
|
61
binbinyouliiii OP @QAO #59 我早些年是从 Java 裸 Servlet+JDBC 过来的,你有没有想过我为什么要说“体验倒退”吗?
|
62
liuxu 2022-01-21 17:29:27 +08:00
@binbinyouliiii 我只教儿子,你真的想让我教你么
|
63
x940727 2022-01-21 17:29:53 +08:00 1
为什么那么多人就是不能承认 Go 写 Web 、写业务就是不如 Java 呢?从脚手架完善程度,生态,可参考项目,到后期项目的维护性,代码的可读性,哪个方面 Go 能比得上 Java ?
|
64
liuxu 2022-01-21 17:31:05 +08:00
媲美 Java web 本身就是个伪命题,非要用 java 思维写 golang
|
65
binbinyouliiii OP @liuxu #62 素质极差
|
66
Marmot 2022-01-21 17:31:42 +08:00
当你手里拿着一个锤子的时候,看谁都像钉子。
|
67
svt 2022-01-21 17:32:40 +08:00
干!干!干!干就完了
|
68
x940727 2022-01-21 17:32:52 +08:00 10
@binbinyouliiii 和那种低水平低素质的人没必要讨论,讨论技术问题都要认爹,可想他当儿子当的有多憋屈。
|
69
banmuyutian 2022-01-21 17:34:46 +08:00 1
"Less is more."Goland 是 more 在哪呢,真心求教
|
70
XiLingHost 2022-01-21 17:37:43 +08:00
建议根据需求选语言,而不是一个语言到处用,不同的语言肯定有不同的优势,不然何必搞出这么多不同的语言呢
|
71
binbinyouliiii OP @XiLingHost #70 《领导的爱好》
|
72
liuxu 2022-01-21 17:39:52 +08:00
@x940727 除了生态是和代码贡献人数有关,其他的维护性可读性都和软件工程设计问题,和语言一点关系都没有,就算是 ffmpeg 、linux kernel 这种项目,只要设计好了阅读起来一点问题都没有,不会真的有人觉得多了点 err :=就不可读了吧
“孩子看什么都不顺眼,多半是要打了” |
73
Immortal 2022-01-21 17:44:42 +08:00
lz 可以看下 kratos 和 go-zero 这些框架,可能更符合你之前的习惯
|
74
cloud107202 2022-01-21 17:45:50 +08:00 12
看多了各种语言爱好者的争论,唯独 go 语言的偏执狂热粉比例很异常。随便一个涉及到 go 的讨论帖都有扑面而来的 go 里 go 气
难道是 go 的某个语法特质或社区的某种气质会聚集这样的人? |
75
linzhipeng 2022-01-21 17:46:07 +08:00
不知道我有没有理解对,就是新接触一个技术,希望有一份最佳实践能摆出来,就可以按照这份最佳实践去开发,然后进一步去学习这份最佳实践涉及到的东西,而不是在入门后,从网上搜一大堆解决方案,最后自己总结出一个最佳实践。
|
76
x940727 2022-01-21 17:46:22 +08:00 3
其实什么语言,发展到大型项目,其实在规范上都大差不差。Go 语言的 kubernetes 自己去看看,和 Java 的大型项目有啥区别(比如 Hadoop ,Flink 之流)?
|
78
x940727 2022-01-21 17:49:10 +08:00 2
@liuxu 当然有关系,泛型,继承,重载,重写都是可以提高维护性和可读性的东西,但是相反的也对开发人员有了更高的要求,你语法缺失这些东西,就等于在某些场景下去需要做更多的代码判断,自然而然的会提高阅读难度。这很难理解吗?
|
79
ychost 2022-01-21 17:49:31 +08:00 1
个人比较喜欢 js KOA 那一套约定,用起来很灵活且扩展性极强
|
80
nash 2022-01-21 17:50:40 +08:00
为什么一定要对比语言呢,每种语言都有它自己的生态发展规律,有自己的市场需求场景,就像古代侠客,喜欢用什么武器就用什么武器,不能因为你有刀谱(sprint)有宝刀(java)就去否认剑(golang),还是提高自身的内功比较重要,不然不管是刀还是剑终究都是一块铁
|
81
x940727 2022-01-21 17:52:59 +08:00 2
@nash 楼主并不是否认 Go 存在的意义,而是说在 Web 开发过程中有很多地方不如 Java 方便,如果有 Gopher 知道有什么脚手架能堪比 Spring ,大可以提出来让楼主去用就完了。
|
82
binbinyouliiii OP @nash #80 我没有提过 Go 的语言不行,我标题特指了 web ,也说明了现在 Go 的火热和生态丰富
|
83
HiShan 2022-01-21 17:57:19 +08:00 1
Java 的 Spring 确实 完爆目前所有的 Web 框架。Go 里面也有仿的 Spring ,项目是:[Go-Spring]( https://github.com/go-spring/go-spring)
|
84
nash 2022-01-21 18:13:19 +08:00 1
@binbinyouliiii 很多公司并不是拿 go 直接去写 web ,而是做一些中间件,go 目前的生态是不行,java 写 web 的生态已经无敌了,对比也没意义的,既然市场有需求还是有它的价值和闪光点的,生态的完善也不是一朝一夕的,spring 生态也是多少开发者 20 几年建设出来的,如果看好 go 就去参与它生态的建设,如果不喜欢继续深入 java ,个人取舍了,个人意见,不喜勿喷
|
85
fregie 2022-01-21 18:13:23 +08:00
本身就不是面向对象的语言,非拿来 CURD ,体验肯定好不到哪去
|
86
dqzcwxb 2022-01-21 18:14:27 +08:00
@cloud107202 加入我 go 教当一个忠心教徒吧
|
87
liprais 2022-01-21 18:14:41 +08:00 2
golang 都十来年还生态不行,就是不愿意承认不好用呗
|
88
iyear 2022-01-21 18:14:52 +08:00
go 写业务很麻烦,但是你这喷的不在点上,gin 和 spring 也不是一个体量的框架呃。。该喷的是 go 没有 spring 这样大一统的框架,生态还是不行
|
90
binbinyouliiii OP @nash #84 虽然但是,一般主 go 公司不可能只写中间件啊,字节和 B 站的 crud 肯定大部分也是 go 写的
|
91
nash 2022-01-21 18:19:20 +08:00
@binbinyouliiii 那你就想想为什么他们不用 java 呢,既然 go 那么难用?
|
92
binbinyouliiii OP |
93
nash 2022-01-21 18:23:01 +08:00
@binbinyouliiii 是体验不好,再说又要开战了
|
94
si1enceneo 2022-01-21 18:24:16 +08:00 1
楼主对比的本来就是业务,CRUD ,这方面 go 确实没 java 好用 ,为啥不愿意承认呢
|
95
x940727 2022-01-21 18:24:42 +08:00
@nash Python 的 Django 勉勉强强可以在基本功能上比一下,如果论扩展性和支持生态的话,那 Spring 真的是独孤求败了,那是几万顶级 Java 程序员十几二十年的贡献。
|
96
www5070504 2022-01-21 18:25:07 +08:00
不明白为啥这么多 web 要用 go 感觉 go 的主场不是在其他方向么 比如网络 中间件 之类的
|
97
nash 2022-01-21 18:27:01 +08:00
@si1enceneo 如果 CRUD ,别说对比 spring 了,对比 laravel 还差一大截呢
|
98
binbinyouliiii OP @nash #93 我同样可以找出不选 java 选 pyhton 的,“为什么他们选 python 不选 java 呢”
|
99
liian2019 2022-01-21 18:32:56 +08:00
每种语言都有擅长的方向
|
100
liuxu 2022-01-21 18:41:07 +08:00 1
|