The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
hahaFck

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

  •  
  •   hahaFck · Jun 24, 2020 · 10659 views
    This topic created in 2154 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    如果是业务系统也还是看具体,go 语言层面的主要短板是为了语法简洁大幅牺牲了语义表达能力。如果你的业务对象数据结构稳定,业务流程不很依赖于对象成员的值,那么 go 还是不错的。反之则不适合。
    murmur
        9
    murmur  
       Jun 24, 2020
    看什么企业,传统企业的要找后手维护,你能保证别人能招到 go 做二开?
    simple2025
        10
    simple2025  
       Jun 24, 2020
    @chengxiao 有个问题, 像 `https://github.com/eddycjy/go-gin-example/blob/master/models/article.go` 这种每个 model 都基本是类似的方法,怎么用 interface 搞成只有一个呢?
    TinyKube
        11
    TinyKube  
       Jun 24, 2020 via Android
    looplj
        12
    looplj  
       Jun 24, 2020
    没必要
    scnace
        13
    scnace  
       Jun 24, 2020 via Android   ❤️ 2
    go 写业务要靠 generation orm 的话 ent 是个好的方向( Go2 之前
    ben1024
        14
    ben1024  
       Jun 24, 2020
    不合适,人员变动项目都无法维护
    youxiachai
        15
    youxiachai  
       Jun 24, 2020
    java 技术栈人好找啊......你 go 开发完.后面维护.....不好招人啊...好的你给不起高价,差的是真不会..
    chengxiao
        16
    chengxiao  
       Jun 24, 2020
    @youxiachai Go 的好处是那种 好的差的 如果写业务逻辑的话 ,差距不会很大,语言限定的死,没有那么多黄花的语法糖,方便维护,但是需要这个人会 Go
    dismonster
        17
    dismonster  
       Jun 24, 2020
    放心去用吧,亲自试过了,一点问题没有。就算公司程序员不会 go,一个星期也能直接上项目。除非程序员能力太差
    chengxiao
        18
    chengxiao  
       Jun 24, 2020
    @chenqh struct 嵌套啊
    Hanggi
        19
    Hanggi  
       Jun 24, 2020
    整体来说没有问题,但是!注意点很多。

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

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

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

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

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

    写增删改查就没有逻辑复用了吗?要逻辑复用 go 只能复制黏贴,弄得多了,后期要改,还不好维护。
    ifsclimbing
        39
    ifsclimbing  
       Jun 26, 2020
    @zjsxwc 代码生成啊
    coolair
        40
    coolair  
       Oct 15, 2021
    @chenqh 大兄弟,找到了你说的“有个问题, 像 `https://github.com/eddycjy/go-gin-example/blob/master/models/article.go` 这种每个 model 都基本是类似的方法,怎么用 interface 搞成只有一个呢?”这种解决方法了吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   966 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 130ms · UTC 21:50 · PVG 05:50 · LAX 14:50 · JFK 17:50
    ♥ Do have faith in what you're doing.