我的意思是企业的业务系统,不是底层中间件那种的,业务系统注重的是业务逻辑吧,业务逻辑复杂,增删改查什么的比较多,业务系统用 spring 的比较多吧。
那用 GO 开发 spring 这种的企业系统,痛点在哪呢,工具少,造轮子多?
1
zjsxwc 2020-06-24 10:54:27 +08:00
写么肯定可以写的,就是没有泛型写起来累
|
2
GeruzoniAnsasu 2020-06-24 10:58:44 +08:00
gorm 没有竞争对手,但 gorm 本身就很多坑
另外业务系统复杂性最终其实都压在了数据库、队列 /缓存、分布式上,而这些解决方案都是跨语言的,所以对 go 来说其实还好。还有一些边角小坑是可能会用到一些不知道有没有人维护的 package,不过这个规避起来相对简单 其它的还都挺香的,尤其是有 cgo 这个后手,实现性能计算的模块没有什么选型负担 |
3
chengxiao 2020-06-24 11:07:00 +08:00
感觉 go 还是挺适合写这种业务系统的,泛型是个问题但是问题不大,interface 能凑合着用
这两年 go 的库也逐渐多起来了,常用的基本都能找到 不过也有问题就是要考虑下,后续接手多人用不用 go |
4
NCZkevin 2020-06-24 11:07:13 +08:00
当然可以,字节内部系统都是 go 开发的,就是开发起来确实没有 java 系的生态好,gorm 基本是个残废,很多复杂逻辑写起来没有 spring 方便。
|
5
MemoryCorner 2020-06-24 11:23:43 +08:00
适合。
|
6
rockyou12 2020-06-24 11:33:02 +08:00 5
没 java 合适,首先没有 flowable 那种流程引擎,orm 比不上 jpa 的各种框架。而且企业业务系统一般并发不高,难点都在业务上,go 没什么优势。
|
7
basefas 2020-06-24 11:35:51 +08:00
@GeruzoniAnsasu gorm 快要有 v2 版本了,据说重构了,等正式版发出来看看吧
|
8
ConradG 2020-06-24 11:39:10 +08:00
最后一句话很怪异,spring 就属于“底层中间件”的范畴,用 go 开发个 spring 说起来蛮适合的。
如果是业务系统也还是看具体,go 语言层面的主要短板是为了语法简洁大幅牺牲了语义表达能力。如果你的业务对象数据结构稳定,业务流程不很依赖于对象成员的值,那么 go 还是不错的。反之则不适合。 |
9
murmur 2020-06-24 11:56:05 +08:00
看什么企业,传统企业的要找后手维护,你能保证别人能招到 go 做二开?
|
10
chenqh 2020-06-24 11:59:27 +08:00
@chengxiao 有个问题, 像 `https://github.com/eddycjy/go-gin-example/blob/master/models/article.go` 这种每个 model 都基本是类似的方法,怎么用 interface 搞成只有一个呢?
|
11
TinyKube 2020-06-24 12:23:26 +08:00 via Android
|
12
ZSeptember 2020-06-24 12:38:33 +08:00
没必要
|
13
scnace 2020-06-24 13:27:45 +08:00 via Android 2
go 写业务要靠 generation orm 的话 ent 是个好的方向( Go2 之前
|
14
ben1024 2020-06-24 13:29:31 +08:00
不合适,人员变动项目都无法维护
|
15
youxiachai 2020-06-24 13:38:23 +08:00
java 技术栈人好找啊......你 go 开发完.后面维护.....不好招人啊...好的你给不起高价,差的是真不会..
|
16
chengxiao 2020-06-24 14:23:44 +08:00
@youxiachai Go 的好处是那种 好的差的 如果写业务逻辑的话 ,差距不会很大,语言限定的死,没有那么多黄花的语法糖,方便维护,但是需要这个人会 Go
|
17
dismonster 2020-06-24 14:26:21 +08:00
放心去用吧,亲自试过了,一点问题没有。就算公司程序员不会 go,一个星期也能直接上项目。除非程序员能力太差
|
19
Hanggi 2020-06-24 14:34:44 +08:00
整体来说没有问题,但是!注意点很多。
比如,如果你用的是 gin 你要注意他不兼容 RESTful API,项目管理的时候要主要循环引入。 还有一些处理 JSON 的小坑,gorm 的一些坑。 这些都搞清楚了之后就会发现,开发效率和服务性能都很舒爽。 |
20
CoderGeek 2020-06-24 14:40:32 +08:00
用 go 是为了减少可替代性嘛
|
22
sivacohan 2020-06-24 15:24:06 +08:00 1
我非常不建议用 go,首选 Java 。理由是生态问题。
企业应用开发的特点是,用户数量、并发量、数据总量都很小(相比于互联网常见都千万并发、百万 TPS )。 运维环境一般都是单点部署,服务器硬件也就是一般,没有上百 G 的内存给你用。 在开发过程中的难点,主要是因为复杂的权限关系、数据隔离性带来的复杂度。如果没有完善的业务权限框架,这东西改起来成本就太高了。 PS:工程师做业务系统常见的问题是,从业务流程入手,观察业务数据的流动,而忽略了“角色”的责任边界。做业务系统的时候,一定要先从人下手,分析每个人承担哪些角色,这些角色分别的责任是什么。业务系统里“用户”最小的粒度是“角色”而不是人。人员可以离职可以调岗,角色是不会变化的。 |
23
janxin 2020-06-24 15:29:30 +08:00
我个人建议也确实是首选 Java,因为一般企业业务系统不同于互联网化业务系统,并发不需要太高但是需要复杂的统计报表模块设计,一般需求变化跟随业务进行,经常会 180 度大转弯,需要大量轮子辅助开发,Go 生态目前对比 Java 肯定是不如的,如果你熟悉 Java,首选 Java 并没什么不对。
|
24
keepeye 2020-06-24 18:16:43 +08:00
企业应用建议用 java,毕竟生态第一,程序员可替代性也高
|
25
tairan2006 2020-06-24 21:50:57 +08:00 via Android
企业应用还是 java 吧
|
26
mreasonyang 2020-06-24 22:07:39 +08:00 via iPhone
没问题,但如果是体量大的项目你要有造轮子的能力和人力,另外一定要和你们公司整体技术栈统一
|
27
movistar 2020-06-24 22:29:16 +08:00
@chenqh Golang 在这种场景有解决方案的
写一堆 interface,然后直接断言就行了.Golang 的断言只要有对应方法就行,不管是什么类,也不管抽象 |
29
zhengjing 2020-06-24 22:40:08 +08:00
@GeruzoniAnsasu cgo 这种一般 go 项目不会用吧,这么在乎性能,一开始也不会选 Go 了~
|
30
ArJun 2020-06-24 23:29:07 +08:00
完全可以,但是成本不一样
这样理解,java 一个普通应届生能写好的逻辑,换做 GO 写,要写好无 bug 可能至少得一年经验以上的人 |
32
troywinter 2020-06-24 23:51:00 +08:00
我觉得是非常合适的,曾经在某短视频巨头写过一段时间 java,我对 java 在极限场景可以压榨的性能还有一些生态还是印象非常深刻的,但其实 go 对这些场景也可以不错的覆盖,让我觉得很实用的一些点还是资源占用可以很低,这是 java 比较难做到的,我司的大部分服务的 docker image 打包出来都可以在 40m 一下,运行时的内存占用也在 100m 左右,有状态的服务会略多,这对于业务刚起步的初创公司来说其实可以节省一大笔费用,同时也意味着你在单个节点上可以做的事情更多,如果你的场景是财大气粗的大厂,那这些确实算不上优点。
|
33
ifsclimbing 2020-06-25 00:01:58 +08:00
@zjsxwc 写增删改查用啥泛型
|
34
huntcool001 2020-06-25 00:30:18 +08:00
等 GraalVM 成熟了. Java 也能做到 docker 镜像小了
|
35
Ezez 2020-06-25 01:20:25 +08:00 via iPhone 1
借楼请问一下 go 比较适合什么样的场景,最近准备学一下 go
|
36
shellic 2020-06-25 09:58:50 +08:00 via Android
肯定可以,不行也得强行可以,万物皆可 go 。Java 这老古董早该入土了:doge
|
37
chenqh 2020-06-25 10:38:48 +08:00
@ifsclimbing crud 也要泛型的吧,比如分页,没有泛型的话,每个 model 写一次
|
38
zjsxwc 2020-06-25 12:17:52 +08:00 via Android
|
39
ifsclimbing 2020-06-26 18:33:32 +08:00
@zjsxwc 代码生成啊
|
40
coolair 2021-10-15 10:59:25 +08:00
@chenqh 大兄弟,找到了你说的“有个问题, 像 `https://github.com/eddycjy/go-gin-example/blob/master/models/article.go` 这种每个 model 都基本是类似的方法,怎么用 interface 搞成只有一个呢?”这种解决方法了吗?
|