• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gowk
V2EX  ›  程序员

用 Go 开发公司内部的业务系统,后端该如何选型?

  •  
  •   gowk ·
    qinjinling · Jul 4, 2022 · 18331 views
    This topic created in 1589 days ago, the information mentioned may be changed or developed.

    对于 Go 一直在关注和了解,写过几个玩具项目,实际工作中没有使用过。现在有几个公司内部项目需要启动,想组建一个 Go 团队,刷选了几轮简历发现应届生或者毕业一两年的,简历上面 Go 的身影越来越多。

    倒不是排斥 Java ,说实话写 Java 心智负担较重,看过很多 Java 写的项目代码是惨不忍睹,导致现在看到 Java 就有一种「恶心」的感觉,其实也明白 Java 确实比较适合写业务,但是我觉得写好并不容易,尤其是对一些刚毕业开发经验少的同学来说。

    另外我十分赞同 Rob Pike 的这段话:

    "The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt."

    这也是我想全面转用 Go 语言的原因

    • 有其他语言背景可以快速上手
    • 简单高效,心智负担小(没有面向对象、继承)
    • 开源社区有大量的库辅助开发
    • 1.18 终于上了泛型
    • 大爱 gofmt ,if err != nil (doge

    因为是公司内部业务系统,没必要上微服务,且前端打算使用 Vue 2|3 ,想请教大家两个问题:

    • 后端如何选型?
    • 如何分层,项目结构如何布局?
    Supplement 1  ·  Jul 4, 2022
    看大家都在推荐 goframe
    今晚再深入研究一下
    另外大家可以说说团队用的一些轻量级基础设施
    比如 api 接口文档用什么? swagger ?
    DevOps 用 gogs 还是 gitea ?
    项目管理工具呢(之前用过 redmine)?
    107 replies  •  2024-07-08 17:47:19 +08:00
    1  2  
    ❮ ❯
    a330202207
    a330202207
    Jul 4, 2022❤️1
    1
    goframe 吧
    lllllliiii
    lllllliiii
    Jul 4, 2022
    2
    还招人吗,github.com/fzdwx 需要简历吗?
    TWorldIsNButThis
    TWorldIsNButThis
    Jul 4, 2022 via iPhone❤️2
    3
    那我建议 ts 后端
    yunxi
    yunxi
    Jul 4, 2022
    4
    go 确实还是比较不错的,写一下具体选型把:
    http 框架: gin (使用比较广泛,目前没有发现问题)
    ORM : gorm (使用简单,易上手,使用比较广泛)
    日志:logrus
    ...
    其他楼主可以自行 google ,找一些大家常用的包即可。
    项目分层,可以看看我之前写的一片文章 https://www.artacode.com/post/golang/template/
    dqzcwxb
    dqzcwxb
    Jul 4, 2022❤️1
    5
    "但是我觉得写好并不容易,尤其是对一些刚毕业开发经验少的同学来说。"-这句话是用初学者的角度评价 java
    "有其他语言背景可以快速上手"-这里是想要有工作经验和一门语言的程序员,至少不是初学者
    mekingname
    mekingname
    Jul 4, 2022
    6
    试一试用两天 gin-vue-admin ,如果你用这个项目用起来很顺手的话,那么后端选型就很容易了,直接 gin.
    gowk
    gowk
    OP
    Jul 4, 2022
    7
    @a330202207
    了解过这个框架,感觉还不错,感觉选型,研究各种框架真的很累
    期待有人甩给我一个 GitHub 示例项目地址,直接开干🤣
    gowk
    gowk
    OP
    Jul 4, 2022
    8
    @fzdwx #2
    我们是国企,小地方,离北京很近
    不加班,想 work-life-banlance 的可以考虑一下
    gowk
    gowk
    OP
    Jul 4, 2022
    9
    @TWorldIsNButThis #3
    ts 能比 Go 好写?
    gowk
    gowk
    OP
    Jul 4, 2022
    10
    @yunxi #4
    谢谢,算是中规中矩的了,另外 ORM 我打算用 ent
    voidmnwzp
    voidmnwzp
    Jul 4, 2022 via iPhone
    11
    放心 泛型不会大规模使用 这几年内
    iosyyy
    iosyyy
    Jul 4, 2022 via Android
    12
    建议直接 goframe 其他的要配一大堆东西才能算一个项目
    iwdmb
    iwdmb
    Jul 4, 2022
    13
    内部系统 GoFrame +1
    helone
    helone
    Jul 4, 2022❤️2
    14
    gofiber + entgo
    wzw
    wzw
    Jul 4, 2022
    15
    GoFrame + 1 (gin 和 GoFrame, 我选了 GoFrame, 简单易用+够用)
    Gota
    Gota
    Jul 4, 2022
    16
    刚上手建议用比较轻量级的框架,比如 https://github.com/go-chi/chi

    项目结构可以参考我之前写的一篇博客: https://blog.igota.net/posts/20220422/
    bigbigpark
    bigbigpark
    Jul 4, 2022
    17
    想省心上 GoFrame 吧
    hLc1
    hLc1
    Jul 4, 2022 via Android
    18
    ts 后端也没问题,ts 的 nestjs 框架不同风格的 orm 就提供了 4 种,框架大而全。
    hLc1
    hLc1
    Jul 4, 2022 via Android
    19
    之前知乎上有个团队用 nestjs 写游戏,80w 行代码游戏的项目毫无压力。
    brucedone
    brucedone
    Jul 4, 2022
    20
    goframe , 解决 orm , 常用轮子,分层,等常见问题
    welong
    welong
    Jul 4, 2022
    21
    还招人吗
    lesismal
    lesismal
    Jul 4, 2022❤️2
    22
    直接用我出品的库吧,用 RPC 的接口方式交互,既支持普通的 HTTP RPC CALL 请求,也支持 Websocket 长连接 RPC CALL ,可以 Server 端主推送,中间件都可以定制,协议交互的各种业务类型都方便支持:
    github.com/lesismal/arpc
    web 的例子看这里:
    github.com/lesismal/arpc/tree/master/examples/webchat

    数据库也用我这个,比什么 ORM 或者其他的 RawSql 库都简单易用方便得很(隔壁帖子前阵子刚有人喷 go 的 ORM 呢):
    github.com/lesismal/sqlw
    例子看这里:
    github.com/lesismal/sqlw_examples
    前几天刚发过帖子:
    www.v2ex.com/t/861739

    不要以为 star 少不好用,那是因为做得晚、现在几个国内 go 站长都忙着卖课程挣钱所以论坛没人看了推广不起来、我也不屑于去加那些互相捧臭脚的技术饭圈,有不少项目 KPI 搞假玩意忽悠人呢、氛围太恶心

    吹个牛说,我提供的都是最强方案,如果哪位不服,来看看试用下欢迎来跟我 battle 。
    mcfog
    mcfog
    Jul 4, 2022
    23
    要 Swagger/OpenAPI ,已选 ent 的话
    我建议 https://goa.design/

    goa + ent + uber/zap
    根据团队风格 /喜好判断是否要来个 DI 容器
    metamask
    metamask
    Jul 4, 2022
    24
    gin + ent 能满足日常开发,虽然有些东西还要自己手搓,体验感还不错
    iosyyy
    iosyyy
    Jul 4, 2022 via Android
    25
    goframe 自带 swagger 可以自动生成。。
    themiscloud
    themiscloud
    Jul 4, 2022
    26
    ent 用着感觉非常棒
    rrfeng
    rrfeng
    Jul 4, 2022❤️3
    27
    在看到这个帖子之前我都没听说过 goframe ,怎么突然就这么多人推荐??
    gowk
    gowk
    OP
    Jul 4, 2022
    28
    @rrfeng 可能因为 1 楼推荐了吧 ……
    liuhan907
    liuhan907
    Jul 4, 2022 via Android
    29
    公司内部项目,不用操心延迟和同时在线用户数量,我就不觉得会有比 blazor server 糊逻辑更快的。可惜这是微软的东西,zz 不正确(狗头
    littlehero220
    littlehero220
    Jul 4, 2022
    30
    logrus 大量反射
    jmllx1963
    jmllx1963
    Jul 4, 2022
    31
    用 goframe 然后用 apifox 直接导入 api 文档,对前端和维护都非常友好的框架
    dilu
    dilu
    Jul 4, 2022
    32
    建议你搞个脚本,可以一键生成 curd 代码和前端简单的表单样式,这样后续开发速度和规范性都有很大的提高
    keenkiller
    keenkiller
    Jul 4, 2022 via Android❤️1
    33
    Gin zap sqlbuilder+sqlx 啥框架都是浮云
    ipwx
    ipwx
    Jul 4, 2022
    34
    @liuhan907 Python FastAPI 表示也很愉快
    ipwx
    ipwx
    Jul 4, 2022❤️1
    35
    @liuhan907 (顺便吐槽一下 FastAPI 的 slogan

    ——最快的 Python web 框架之一
    https://fastapi.tiangolo.com/zh/

    如果说开发最快的框架之一还说不定是的。。。运行最快的,这个我不觉得它说对了。内置强类型的各种输入输出 Serialization / Deserialization 和检查,还有自动产生 Swagger 文档。async def 和 def 可以混用。配合 sqlmodel 可以直接对接 sqlalchemy 的 ORM 到 Swagger 的 JSON API 。爽爆了。

    不过公司内部项目,服务器算力都是过剩的,管这个干嘛。
    815979670
    815979670
    Jul 4, 2022
    36
    api 文档的话 apifox 试试? 有人说用起来会卡,但强大的功能还能免费团队协作,也很诱人。
    sakishum
    sakishum
    Jul 4, 2022
    37
    推荐 GVA (gin-vue-admin)
    charlie21
    charlie21
    Jul 4, 2022
    38
    巴巴爸爸这头像可以
    apple2026
    apple2026
    Jul 5, 2022 via iPhone
    39
    goframe +1
    liuhan907
    liuhan907
    Jul 5, 2022
    40
    @ipwx
    sqlalchemy 和 efcore 是唯二我认为能称得上是好用的 ORM ,其它的我觉得都不怎么好用-_-
    FastAPI 糊 API 配合 sqlalchemy 确实也顺手,但是当你想写页面的时候,还是 blazor server 这种前后混合的糊起来快。只不过延迟一高就没法用了,非常遗憾。
    SteveWoo
    SteveWoo
    Jul 5, 2022❤️1
    41
    《架构整洁之道》:深入了解业务,技术上先别管那么多,不管细节直接开撸。比如:就在 main 函数里把核心业务逻辑全实现了, 最多持久化就写个本地文件。
    ipwx
    ipwx
    Jul 5, 2022
    42
    @liuhan907 Oh 我是全栈。

    所以我的方案是 Vue.js + Webpack <====> FastAPI + SQLModel

    SQLModel 是个神奇的东西,Thin wrapper around Pydantic + SQLAlchemy 。换句话说用一个模型定义可以同时提供 response_model 给 FastAPI ,以及给 SQLAlchemy 。当然 SQLModel 自身原语稍微受限,但是完全可以直接注入 SQLAlchemy 的东西。

    在我的实际使用中,response model 是更侧重 SQLAlchemy 而兼容 Pydantic 的写法。Request model 则是纯粹的 Pydantic 。用起来还是很爽的。
    ipwx
    ipwx
    Jul 5, 2022
    43
    @liuhan907 而且不得不说 npm install 真的是生产力(滑稽
    licoycn
    licoycn
    Jul 5, 2022❤️3
    44
    我是组装搭建的:

    web:github.com/gin-gonic/gin
    数据库:gorm.io/gorm
    配置:github.com/spf13/viper
    redis: https://github.com/go-redis/redis
    工具包:github.com/duke-git/lancet
    参数验证:github.com/gookit/validate
    日子:go.uber.org/zap
    json:github.com/json-iterator/go
    协程池:github.com/panjf2000/ants

    当然还有其他组件,自己组建灵活性高定制型高~
    a330202207
    a330202207
    Jul 5, 2022
    45
    Vue 的话这俩都可以,goframe 自带 swagger ,api 文档:showdoc 挺好用,DevOps:GitLab ,项目管理:禅道或者 Jira 吧
    https://github.com/tiger1103/gfast
    https://github.com/bufanyun/hotgo
    charmToby
    charmToby
    Jul 5, 2022
    46
    推荐 go-zero ,生态方面也慢慢再起来,作者也在及时迭代。
    文档我推荐 apidoc 集成特别方便。
    ikaros
    ikaros
    Jul 5, 2022
    47
    新手建议 echo gin 这类就行了, 有些框架做了太多事情,隐藏了很多底层细节,出了问题排查起来很麻烦。echo 和 gin 基本都是对基础库的封装, 出了问题看源码也很快能解决。

    进阶可以试试 gokit
    fgk
    fgk
    Jul 5, 2022
    48
    github 上面不是有个 gin Vue admin 的项目么?和你要的一样一样的,哪来就可以用了
    wangxin13g
    wangxin13g
    Jul 5, 2022
    49
    为什么觉得 java 都写不好的换 go 写就能写好呢,用 java 抽象已经很简单了
    BBCCBB
    BBCCBB
    Jul 5, 2022
    50
    go 写业务更惨...
    liudaolunhuibl
    liudaolunhuibl
    Jul 5, 2022
    51
    java 还有心智负担,那你要做好用 go 随时高血压的危险,java 的优点就是很难写出烂代码,条条框框太多了
    LieNoWell
    LieNoWell
    Jul 5, 2022
    52
    非官方标准布局: https://github.com/golang-standards/project-layout


    PS:
    凡是国人开发,却不提供中文 README 的请一律枪毙。
    我看的懂英文,只是不想看那些蹩脚英文。
    BeijingBaby
    BeijingBaby
    PRO
    Jul 5, 2022❤️7
    53
    我是来提反对意见的。
    不要用所谓 goframe 这种框架,这种框架看似给了你一整套解决方案,但是:
    框架集成的都是最优解吗? orm ?缓存管理?数据校验?……

    框架集成的这么多,你能用到多少?只要有一个不符合最优解或你的团队偏好,用起来就很蹩脚了。
    小项目可以用用,好处只有一个,快速开始写业务。
    能预见的可能变大的项目不建议,在某个规模(可能很快遇到)后,框架只会带来坏处,不会有好处,你所有的东西都被框架给“框”住。
    njutree
    njutree
    Jul 5, 2022
    54
    简单看了下 goframe 和 gin 很像在 gin 之上加了很多特性, 很多功能还是很有用的. 但是感觉文档组织和写的稍微有些混乱, 软件工程的东西讲了不少, 框架相关的文档写的不是很细.
    gowk
    gowk
    OP
    Jul 5, 2022
    55
    @tairan2006 #33
    sqlbuilder 用哪个库比较好?
    gowk
    gowk
    OP
    Jul 5, 2022
    56
    @liuhan907 #40
    efcore 确实舒服,Go 里面跟它对标的就是 ent 了吧
    gowk
    gowk
    OP
    Jul 5, 2022
    57
    @licoycn #44
    谢谢,值得参考
    redvoilin
    redvoilin
    Jul 5, 2022
    58
    用 go 来写业务系统,真是没事找事的,go 设计的初衷就不是为了给你们写业务系统的吧,就国内热衷用 go 写业务系统。用 java 、ruby on rails 这些不香吗
    Cyanhall
    Cyanhall
    Jul 5, 2022
    59
    @BeijingBaby goframe 的 ORM 感觉比不上 ent, ent 可全静态方法调用去写逻辑,不用自己手打表名、字段名,sql 。不过 goframe 的数据校验比流行的 go-playground/validator 完善很多。有参考价值。
    yazinnnn
    yazinnnn
    Jul 5, 2022❤️2
    60
    期待两年后 op 看到 go 代码后感到 '恶心'
    liuhan907
    liuhan907
    Jul 5, 2022
    61
    @ipwx
    但是我是纯粹的后端,写前端是为了公司内部用,所以前后分离是很麻烦的,对我来说。而且我喜欢静态强类型语言,不然团队合作真的挺难受的。
    liuhan907
    liuhan907
    Jul 5, 2022
    62
    @gowk 我放个暴论在这,Go 根本没有能和 efcore 相比的 ORM ,提鞋都不够。
    ipwx
    ipwx
    Jul 5, 2022
    63
    @liuhan907 2333 嘛嘛,毕竟你是纯粹后端。

    我虽然做的也是公司内部用的,但我毕竟是全栈。对我来说因为会前后端分离,所以可以用上开发速度最快的一套组合。
    gowk
    gowk
    OP
    Jul 5, 2022
    64
    @liuhan907
    之前用 ASP.NET Core + efcore 做了好几个项目了,奈何 .NET 开发人员太难招,其实 .NET 入门也挺简单的
    C# 用起来太舒服了
    gowk
    gowk
    OP
    Jul 5, 2022
    65
    @yazinnnn #60
    哈哈,目前来说用 Go 的感觉就一个字……爽
    gowk
    gowk
    OP
    Jul 5, 2022
    66
    @redvoilin #58
    ror 就别提了,虽然好用但是跟 .NET 一样,招不到人
    lesismal
    lesismal
    Jul 5, 2022
    67
    @gowk #55
    sqlw

    OP 你瞅一眼试一下,还有比我这个好用的吗。。。

    ```golang
    result, err := db.Insert("insert into sqlw_test.sqlw_test", &m)
    if err != nil {
    log.Panic(err)
    }

    result, err := db.Delete("delete from sqlw_test.sqlw_test where id=?", deleteId)
    if err != nil {
    log.Panic(err)
    }

    m := Model{
    I: 1,
    S: "str_1",
    }
    updateId := 1
    result, err := db.Update("update sqlw_test.sqlw_test set i=?, s=? where id=?", &m, updateId)
    if err != nil {
    log.Panic(err)
    }

    var model Model
    selectId := 1
    result, err := db.Select(&model, "select * from sqlw_test.sqlw_test where id=?", selectId)
    // result, err := db.SelectOne(&model, "select (i,s) from sqlw_test.sqlw_test where id=?", selectId) // select some fields
    if err != nil {
    log.Panic(err)
    }

    var models []*Model // type []Model is also fine
    result, err = db.Select(&models, "select * from sqlw_test.sqlw_test")
    // result, err = db.SelectOne(&models, "select (i,s) from sqlw_test.sqlw_test") // select some fields
    if err != nil {
    log.Panic(err)
    }
    ```
    sunwei0325
    sunwei0325
    Jul 5, 2022
    68
    我怎么和楼主恰好相反, java 写业务代码最没有心智负担
    lesismal
    lesismal
    Jul 5, 2022
    69
    @BeijingBaby
    非常同意,那些搞了一大套微服务的各种、或者集成 ORM 之类的,都是适合他们自家业务而已。而且很多集成别人的库的项目,说句不好听的,都不应该叫框架
    lesismal
    lesismal
    Jul 5, 2022
    70
    @licoycn #44
    同学,求 orm 使用者试玩我的 sqlw 一下给个体验反馈。
    另外对于协程池,我这里有份 benchmark 请查收,包括标准库、ants 、字节的、我自己的库里带的,可以在自己机器上 linux 系统跑下试试不同的 cpu:

    ```sh
    # sleep 0ns
    ubuntu@ubuntu:~/test$ go test -v -bench=.
    goos: linux
    goarch: amd64
    pkg: test
    cpu: AMD Ryzen 7 5800H with Radeon Graphics
    BenchmarkGo
    BenchmarkGo-8 6322 178909 ns/op 16413 B/op 1025 allocs/op
    BenchmarkBytedanceGopool
    BenchmarkBytedanceGopool-8 2714 427975 ns/op 39506 B/op 2045 allocs/op
    BenchmarkAnts
    BenchmarkAnts-8 3746 315216 ns/op 16418 B/op 1025 allocs/op
    BenchmarkMixedPool
    BenchmarkMixedPool-8 4759 253604 ns/op 49168 B/op 3073 allocs/op
    PASS
    ok test 4.821s

    # sleep 10ns
    ubuntu@ubuntu:~/test$ go version
    go version go1.18 linux/amd64
    ubuntu@ubuntu:~/test$ go version
    go version go1.18 linux/amd64
    ubuntu@ubuntu:~/test$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description: Ubuntu 18.04.6 LTS
    Release: 18.04
    Codename: bionic
    ubuntu@ubuntu:~/test$ go test -bench=. -v
    goos: linux
    goarch: amd64
    pkg: test
    cpu: AMD Ryzen 7 5800H with Radeon Graphics
    BenchmarkGo
    BenchmarkGo-8 4406 274001 ns/op 98522 B/op 2051 allocs/op
    BenchmarkBytedanceGopool
    BenchmarkBytedanceGopool-8 2404 486601 ns/op 55419 B/op 2212 allocs/op
    BenchmarkAnts
    BenchmarkAnts-8 3147 396720 ns/op 16437 B/op 1025 allocs/op
    BenchmarkMixedPool
    BenchmarkMixedPool-8 3530 346933 ns/op 131111 B/op 4097 allocs/op
    PASS
    ok test 5.021s
    ```

    ```golang
    package test

    import (
    "sync"
    "testing"
    "time"

    "github.com/bytedance/gopkg/util/gopool"
    "github.com/lesismal/nbio/taskpool"
    "github.com/panjf2000/ants/v2"
    )

    const testLoopNum = 1024
    const sleepTime = time.Nanosecond * 0

    func BenchmarkGo(b *testing.B) {
    b.ReportAllocs()
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
    wg := sync.WaitGroup{}
    wg.Add(testLoopNum)
    for j := 0; j < testLoopNum; j++ {
    go func() {
    if sleepTime > 0 {
    time.Sleep(sleepTime)
    }
    wg.Done()
    }()
    }
    wg.Wait()
    }
    }

    func BenchmarkBytedanceGopool(b *testing.B) {
    b.ReportAllocs()
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
    wg := sync.WaitGroup{}
    wg.Add(testLoopNum)
    for j := 0; j < testLoopNum; j++ {
    gopool.Go(func() {
    if sleepTime > 0 {
    time.Sleep(sleepTime)
    }
    wg.Done()
    })
    }
    wg.Wait()
    }
    }

    func BenchmarkAnts(b *testing.B) {
    b.ReportAllocs()
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
    wg := sync.WaitGroup{}
    wg.Add(testLoopNum)
    for j := 0; j < testLoopNum; j++ {
    ants.Submit(func() {
    if sleepTime > 0 {
    time.Sleep(sleepTime)
    }
    wg.Done()
    })
    }
    wg.Wait()
    }
    }

    func BenchmarkMixedPool(b *testing.B) {
    p := taskpool.NewMixedPool(1024*4, 1, 1024)
    defer p.Stop()

    b.ReportAllocs()
    b.ResetTimer()

    for i := 0; i < b.N; i++ {
    wg := sync.WaitGroup{}
    wg.Add(testLoopNum)
    for j := 0; j < testLoopNum; j++ {
    p.Go(func() {
    if sleepTime > 0 {
    time.Sleep(sleepTime)
    }
    wg.Done()
    })
    }
    wg.Wait()
    }
    }
    ```
    liuhan907
    liuhan907
    Jul 5, 2022❤️1
    71
    @ipwx @gowk
    其实是因为我们是游戏公司,写 web 只是因为运维和运营需要一个平台看数据,这种在线人数 <=1 qps=0.01 的东西,肯定是用最快的方式糊出来就行。efcore 配 blazor server 糊管理平台这种东西,别提多快了。vue3 配合 ts 虽然也不错但是我不是专职前端,写 ts 和 css 还是不如直接 razor 糊顺手。
    keenkiller
    keenkiller
    Jul 5, 2022
    72
    nxcdJaNnmyF9O90X
    nxcdJaNnmyF9O90X
    Jul 5, 2022
    73
    建议 go-zero
    redvoilin
    redvoilin
    Jul 5, 2022
    74
    @gowk 用 ror 开发,也不用几个人员吧,就是用 java 写业务也比 go 好
    Dabney
    Dabney
    Jul 5, 2022
    75
    ent 生成的文件太多了……
    IIInsomnia
    IIInsomnia
    Jul 5, 2022
    76
    Goframe 太重了,可以参考下: https://github.com/shenghui0779/tplgo ,采用轻量的 yiigo
    yrj
    yrj
    Jul 5, 2022
    77
    好像没人推荐,我来安利一下 gofiber
    newghost
    newghost
    Jul 5, 2022
    78
    感觉 rust 比 go 有前途
    hoopan
    hoopan
    Jul 5, 2022
    79
    之前用 gin + gorm 自己搭过一套 web 框架,感觉 go 使用包管理的方式,需要什么组件引入就好了。
    349865361
    349865361
    Jul 5, 2022
    80
    gin fiber echo 都用过,推荐 echo
    Baloneo
    Baloneo
    Jul 5, 2022
    81
    Flask+ApiFox+Peewee
    betainCao
    betainCao
    Jul 5, 2022
    82
    gin+gorm 就够用了,api 接口 swagger 就不错,直接上 gitops 不香吗? GitHub action 这类的,cicd 都可以搞。
    timothyye
    timothyye
    Jul 5, 2022
    83
    @njutree 同感
    encro
    encro
    Jul 5, 2022
    84
    rust + axum + sea-orm
    sophos
    sophos
    Jul 5, 2022
    85
    nicktogo
    nicktogo
    Jul 5, 2022 via iPhone
    86
    等下... 虽然谷歌招人标准有待讨论,是不是得了解下,谷歌招的毕业生和楼主你招的毕业生是不是一个类型,谷歌能提供的资源和楼主能提供的是不是相当?
    sardina
    sardina
    Jul 5, 2022
    87
    不要用那种组合怪产品
    JakeZou
    JakeZou
    Jul 5, 2022 via iPhone
    88
    我来推荐一个 iris
    gowk
    gowk
    OP
    Jul 5, 2022
    89
    @nicktogo #86
    引用这段话的意思是 Go 语言对新人比较友好,没别的意思,不要过度引申
    INCerry
    INCerry
    Jul 5, 2022
    90
    总的来说,Go 不适合写业务系统,如果只写过 Go 可能会觉得我说的是错的,一旦你用过 Java 、C#甚至 Node.Js 都会觉得 Go 写业务系统就是体验降级。
    zyxbcde808
    zyxbcde808
    Jul 6, 2022 via Android
    91
    @ipwx 可以看看 tortoise-orm ,sqlalchemy 异步手感奇差,比以前差远了。这个框架无论手撸 sql 还是 orm 模式都没啥心智负担。
    ipwx
    ipwx
    Jul 6, 2022❤️1
    92
    @zyxbcde808 虽然 sqlalchemy 手感差,但是这段时间写项目,无论什么奇葩的需求我都找到了解决方案。。。

    比如我虽然用了 ORM 但是其实是绑定到 PostgreSQL 的。比如我开了个 ARRAY[ForeignKey[UUID]] 的字段,并且要求建立数组中每个元素的索引。。。。SQLAlchemy 也能支持我这么搞,这就很 nice 了。

    而且通过 SQLModel + FastAPI 我能直接把一个 ORM Class (包含了 UUID date List[ORMModel] 这类复杂的类型)暴露给 JSON API 的 Schema ,在 Swagger 里面能产生文档,这也很爽。
    ipwx
    ipwx
    Jul 6, 2022
    93
    p.s. 那个 ARRAY[ForeignKey[UUID]] 字段其实是某种 object 的 children 字段,引用了另一个表的元素。

    另外我还用 ARRAY[str] 索引了 object 的 tag 。在 sqlalchemy 里面查询可以写作

    Table.tags.contains([tag])
    dcoder
    dcoder
    Jul 6, 2022
    94
    个人感觉写 Java 是不如写 Go 舒服,
    但是你 "大爱 if err != nil ?" 楼主你是认真的么? 还是抖 M ?
    lesismal
    lesismal
    Jul 6, 2022
    95
    得嘞,明珠暗投,祝 OP 好运
    a15757817542
    a15757817542
    Jul 6, 2022
    96
    如果你们写不好 java 对话,go 也是写不好的,这是我的认知
    pastor
    pastor
    Jul 6, 2022
    97
    基于标准库的 echo 比 gin 看着舒服多了,基于 fasthttp 的 fiber 不错
    xiaoba25
    xiaoba25
    Jul 6, 2022
    98
    golang 和 java 都在用,java 用的多些。
    想稍微反驳下楼主。

    1. 为什么用 java 写不好的业务代码的同学,用 golang 可以写好,有没有具体的例子
    2. golang 没有继承和面向对象? 这个和语言关系不大吧 要说 shell 没有面向对象我倒能理解 高级语言基本是支持多泛式编程
    3. java 一样好上手 有 golang 背景或者有 java 背景的互转 我估计 1-3 天基础上手问题不大
    4. 至于你提到的 golang 的辅助库、1.18 上了泛型等 相比 java 库的丰富度来说不值一提哈哈

    综上,个人观点,小项目用啥语言其实都行,用团队不熟悉言准备好踩坑。
    中大型的业务开发类的项目,还是慎用 golang ,例如你可能会和数十种组件进行交互。
    这点来说,java 虽有弊端但他的生态兼容性几乎是最好的。
    coolair
    coolair
    Jul 6, 2022
    99
    楼主慎重,你用 goframe ,还不如去用 java 的 springboot 。
    crazycarry
    crazycarry
    Jul 6, 2022
    100
    spring boot,应届生三天就给我干活,,不要理解,照着抄。抄错自己滚
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   910 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 198ms · UTC 20:53 · PVG 04:53 · LAX 12:53 · JFK 15:53
    ♥ Do have faith in what you're doing.