GO 语言适合开发企业的业务系统么?

2020-06-24 10:51:59 +08:00
 hahaFck

我的意思是企业的业务系统,不是底层中间件那种的,业务系统注重的是业务逻辑吧,业务逻辑复杂,增删改查什么的比较多,业务系统用 spring 的比较多吧。

那用 GO 开发 spring 这种的企业系统,痛点在哪呢,工具少,造轮子多?

9677 次点击
所在节点    Go 编程语言
40 条回复
chenqh
2020-06-24 15:20:00 +08:00
@chengxiao 大佬给个例子,这种用法我不会
sivacohan
2020-06-24 15:24:06 +08:00
我非常不建议用 go,首选 Java 。理由是生态问题。

企业应用开发的特点是,用户数量、并发量、数据总量都很小(相比于互联网常见都千万并发、百万 TPS )。
运维环境一般都是单点部署,服务器硬件也就是一般,没有上百 G 的内存给你用。

在开发过程中的难点,主要是因为复杂的权限关系、数据隔离性带来的复杂度。如果没有完善的业务权限框架,这东西改起来成本就太高了。

PS:工程师做业务系统常见的问题是,从业务流程入手,观察业务数据的流动,而忽略了“角色”的责任边界。做业务系统的时候,一定要先从人下手,分析每个人承担哪些角色,这些角色分别的责任是什么。业务系统里“用户”最小的粒度是“角色”而不是人。人员可以离职可以调岗,角色是不会变化的。
janxin
2020-06-24 15:29:30 +08:00
我个人建议也确实是首选 Java,因为一般企业业务系统不同于互联网化业务系统,并发不需要太高但是需要复杂的统计报表模块设计,一般需求变化跟随业务进行,经常会 180 度大转弯,需要大量轮子辅助开发,Go 生态目前对比 Java 肯定是不如的,如果你熟悉 Java,首选 Java 并没什么不对。
keepeye
2020-06-24 18:16:43 +08:00
企业应用建议用 java,毕竟生态第一,程序员可替代性也高
tairan2006
2020-06-24 21:50:57 +08:00
企业应用还是 java 吧
mreasonyang
2020-06-24 22:07:39 +08:00
没问题,但如果是体量大的项目你要有造轮子的能力和人力,另外一定要和你们公司整体技术栈统一
movistar
2020-06-24 22:29:16 +08:00
@chenqh Golang 在这种场景有解决方案的
写一堆 interface,然后直接断言就行了.Golang 的断言只要有对应方法就行,不管是什么类,也不管抽象
chenqh
2020-06-24 22:36:14 +08:00
@movistar 还是不会
zhengjing
2020-06-24 22:40:08 +08:00
@GeruzoniAnsasu cgo 这种一般 go 项目不会用吧,这么在乎性能,一开始也不会选 Go 了~
ArJun
2020-06-24 23:29:07 +08:00
完全可以,但是成本不一样
这样理解,java 一个普通应届生能写好的逻辑,换做 GO 写,要写好无 bug 可能至少得一年经验以上的人
janxin
2020-06-24 23:40:59 +08:00
@zhengjing 企业内部应用没什么性能需求吧...
troywinter
2020-06-24 23:51:00 +08:00
我觉得是非常合适的,曾经在某短视频巨头写过一段时间 java,我对 java 在极限场景可以压榨的性能还有一些生态还是印象非常深刻的,但其实 go 对这些场景也可以不错的覆盖,让我觉得很实用的一些点还是资源占用可以很低,这是 java 比较难做到的,我司的大部分服务的 docker image 打包出来都可以在 40m 一下,运行时的内存占用也在 100m 左右,有状态的服务会略多,这对于业务刚起步的初创公司来说其实可以节省一大笔费用,同时也意味着你在单个节点上可以做的事情更多,如果你的场景是财大气粗的大厂,那这些确实算不上优点。
ifsclimbing
2020-06-25 00:01:58 +08:00
@zjsxwc 写增删改查用啥泛型
huntcool001
2020-06-25 00:30:18 +08:00
等 GraalVM 成熟了. Java 也能做到 docker 镜像小了
Ezez
2020-06-25 01:20:25 +08:00
借楼请问一下 go 比较适合什么样的场景,最近准备学一下 go
shellic
2020-06-25 09:58:50 +08:00
肯定可以,不行也得强行可以,万物皆可 go 。Java 这老古董早该入土了:doge
chenqh
2020-06-25 10:38:48 +08:00
@ifsclimbing crud 也要泛型的吧,比如分页,没有泛型的话,每个 model 写一次
zjsxwc
2020-06-25 12:17:52 +08:00
@ifsclimbing #29 原文:“@zjsxwc 写增删改查用啥泛型”
回复:

写增删改查就没有逻辑复用了吗?要逻辑复用 go 只能复制黏贴,弄得多了,后期要改,还不好维护。
ifsclimbing
2020-06-26 18:33:32 +08:00
@zjsxwc 代码生成啊
coolair
2021-10-15 10:59:25 +08:00
@chenqh 大兄弟,找到了你说的“有个问题, 像 `https://github.com/eddycjy/go-gin-example/blob/master/models/article.go` 这种每个 model 都基本是类似的方法,怎么用 interface 搞成只有一个呢?”这种解决方法了吗?

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

https://www.v2ex.com/t/684368

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

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

© 2021 V2EX