GO 语言适合开发企业的业务系统么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
hahaFck
V2EX    Go 编程语言

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

  •  
  •   hahaFck 2020-06-24 10:51:59 +08:00 10308 次点击
    这是一个创建于 1960 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    40 条回复    2021-10-15 10:59:25 +08:00
    zjsxwc
        1
    zjsxwc  
       2020-06-24 10:54:27 +08:00
    写么肯定可以写的,就是没有泛型写起来累
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2020-06-24 10:58:44 +08:00
    gorm 没有竞争对手,但 gorm 本身就很多坑

    另外业务系统复杂性最终其实都压在了数据库、队列 /缓存、分布式上,而这些解决方案都是跨语言的,所以对 go 来说其实还好。还有一些边角小坑是可能会用到一些不知道有没有人维护的 package,不过这个规避起来相对简单

    其它的还都挺香的,尤其是有 cgo 这个后手,实现性能计算的模块没有什么选型负担
    chengxiao
        3
    chengxiao  
       2020-06-24 11:07:00 +08:00
    感觉 go 还是挺适合写这种业务系统的,泛型是个问题但是问题不大,interface 能凑合着用
    这两年 go 的库也逐渐多起来了,常用的基本都能找到

    不过也有问题就是要考虑下,后续接手多人用不用 go
    NCZkevin
        4
    NCZkevin  
       2020-06-24 11:07:13 +08:00
    当然可以,字节内部系统都是 go 开发的,就是开发起来确实没有 java 系的生态好,gorm 基本是个残废,很多复杂逻辑写起来没有 spring 方便。
    MemoryCorner
        5
    MemoryCorner  
       2020-06-24 11:23:43 +08:00
    适合。
    rockyou12
        6
    rockyou12  
       2020-06-24 11:33:02 +08:00   5
    没 java 合适,首先没有 flowable 那种流程引擎,orm 比不上 jpa 的各种框架。而且企业业务系统一般并发不高,难点都在业务上,go 没什么优势。
    basefas
        7
    basefas  
       2020-06-24 11:35:51 +08:00
    @GeruzoniAnsasu gorm 快要有 v2 版本了,据说重构了,等正式版发出来看看吧
    ConradG
        8
    ConradG  
       2020-06-24 11:39:10 +08:00
    最后一句话很怪异,spring 就属于“底层中间件”的范畴,用 go 开发个 spring 说起来蛮适合的。

    如果是业务系统也还是看具体,go 语言层面的主要短板是为了语法简洁大幅牺牲了语义表达能力。如果你的业务对象数据结构稳定,业务流程不很依赖于对象成员的值,那么 go 还是不错的。反之则不适合。
    murmur
        9
    murmur  
       2020-06-24 11:56:05 +08:00
    看什么企业,传统企业的要找后手维护,你能保证别人能招到 go 做二开?
    chenqh
        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 搞成只有一个呢?
    TinyKube
        11
    TinyKube  
       2020-06-24 12:23:26 +08:00 via Android
    looplj
        12
    looplj  
       2020-06-24 12:38:33 +08:00
    没必要
    scnace
        13
    scnace  
       2020-06-24 13:27:45 +08:00 via Android   2
    go 写业务要靠 generation orm 的话 ent 是个好的方向( Go2 之前
    ben1024
        14
    ben1024  
       2020-06-24 13:29:31 +08:00
    不合适,人员变动项目都无法维护
    youxiachai
        15
    youxiachai  
       2020-06-24 13:38:23 +08:00
    java 技术栈人好找啊......你 go 开发完.后面维护.....不好招人啊...好的你给不起高价,差的是真不会..
    chengxiao
        16
    chengxiao  
       2020-06-24 14:23:44 +08:00
    @youxiachai Go 的好处是那种 好的差的 如果写业务逻辑的话 ,差距不会很大,语言限定的死,没有那么多黄花的语法糖,方便维护,但是需要这个人会 Go
    dismonster
        17
    dismonster  
       2020-06-24 14:26:21 +08:00
    放心去用吧,亲自试过了,一点问题没有。就算公司程序员不会 go,一个星期也能直接上项目。除非程序员能力太差
    chengxiao
        18
    chengxiao  
       2020-06-24 14:26:59 +08:00
    @chenqh struct 嵌套啊
    Hanggi
        19
    Hanggi  
       2020-06-24 14:34:44 +08:00
    整体来说没有问题,但是!注意点很多。

    比如,如果你用的是 gin 你要注意他不兼容 RESTful API,项目管理的时候要主要循环引入。
    还有一些处理 JSON 的小坑,gorm 的一些坑。

    这些都搞清楚了之后就会发现,开发效率和服务性能都很舒爽。
    CoderGeek
        20
    CoderGeek  
       2020-06-24 14:40:32 +08:00
    用 go 是为了减少可替代性嘛
    chenqh
        21
    chenqh  
       2020-06-24 15:20:00 +08:00
    @chengxiao 大佬给个例子,这种用法我不会
    sivacohan
        22
    sivacohan  
    PRO
       2020-06-24 15:24:06 +08:00   1
    我非常不建议用 go,首选 Java 。理由是生态问题。

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

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

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

    写增删改查就没有逻辑复用了吗?要逻辑复用 go 只能复制黏贴,弄得多了,后期要改,还不好维护。
    ifsclimbing
        39
    ifsclimbing  
       2020-06-26 18:33:32 +08:00
    @zjsxwc 代码生成啊
    coolair
        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 搞成只有一个呢?”这种解决方法了吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2735 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 14:57 PVG 22:57 LAX 06:57 JFK 09:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86