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 · 9864 次点击
    这是一个创建于 1618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的意思是企业的业务系统,不是底层中间件那种的,业务系统注重的是业务逻辑吧,业务逻辑复杂,增删改查什么的比较多,业务系统用 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
    ZSeptember
        12
    ZSeptember  
       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  
       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   ·   实用小工具   ·   1280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.