V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
thisisgpy
V2EX  ›  程序员

golang 老鸟快快显圣

  •  
  •   thisisgpy · 14 小时 56 分钟前 · 3208 次点击

    背景

    我是从一线开发转行到国企做信息化项目管理,朝九晚五,上班基本就是我去 ZF 那边挨骂,然后我转头去骂外包商,基本没什么事。但是我一直放不下自己的技术情节,Java 写了 10 年也腻了,就想用 golang 自己写点东西玩。

    现状

    我最近尝试用 golang 写一些 web 小玩意儿,但是我很难在网上找到一个适合小项目的项目结构,AI 给的也是大型化的结构。我用 fiber 和 gorm ,viper 做配置文件解析。gorm 的事务管理也比较懵,我都是 cursor 生成。

    诉求

    请各位针对我只搞小玩意儿的诉求,指点一个 mini 的项目结构,推荐技术选型,指点一下 gorm 的事务控制。

    61 条回复    2025-02-19 01:14:53 +08:00
    root71370
        1
    root71370  
       14 小时 54 分钟前
    放下 java 思想
    xxmaqzas
        2
    xxmaqzas  
       14 小时 52 分钟前
    gf 不行么?
    laikick
        3
    laikick  
       14 小时 50 分钟前
    laikick
        4
    laikick  
       14 小时 49 分钟前
    不过小项目根本没啥必要纠结项目结构.
    layxy
        5
    layxy  
       14 小时 48 分钟前
    Kratos 的工程结构可以参考下,虽然是 rpc 框架,但是你写 web 也可以
    lesismal
        6
    lesismal  
       14 小时 26 分钟前   ❤️ 5
    @laikick golang-standards/project-layout 这个根本不算是好的结构:

    而且这个 repo 作者可以算是 go 社区里最不要脸的了,我都不敢用“最不要脸的之一”来描述他、怕“之一”不准确:
    https://github.com/golang-standards/project-layout/issues/117

    请做个好人,不要再向别人推荐这个带来更多误导。
    laikick
        7
    laikick  
       14 小时 8 分钟前   ❤️ 1
    @lesismal 是的是的 孩子 你是对的
    Ayanokouji
        8
    Ayanokouji  
       14 小时 2 分钟前   ❤️ 1
    @lesismal 好巧,我也不喜欢这个目录结构
    @thisisgpy 我是基于这个项目改的 https://github.com/mikestefanello/pagoda
    lesismal
        9
    lesismal  
       13 小时 59 分钟前   ❤️ 7
    > 是的是的 孩子 你是对的

    @laikick 其实如果自己不会好好说中文的话,可以完全去混非中文圈,看到过别人喷你、这不是糟蹋自己嘛,何必呢
    wogogoing
        10
    wogogoing  
       13 小时 58 分钟前
    如果是这样的话,那我安利下我的开源项目:

    https://github.com/keepchen/go-sail
    laikick
        11
    laikick  
       13 小时 52 分钟前
    @lesismal 你是对的 👍
    loveuer
        13
    loveuer  
       13 小时 49 分钟前
    如果是 web 后端的话,我自己有搞一个 https://gitea.loveuer.com/loveuer/ultone
    laikick
        14
    laikick  
       13 小时 49 分钟前
    @sn0wdr1am golang-standards/project-layout 这个根本不算是好的结构:

    而且这个 repo 作者可以算是 go 社区里最不要脸的了,我都不敢用“最不要脸的之一”来描述他、怕“之一”不准确:
    https://github.com/golang-standards/project-layout/issues/117

    请做个好人,不要再向别人推荐这个带来更多误导。
    voidmnwzp
        15
    voidmnwzp  
       13 小时 46 分钟前 via iPhone
    建议换个用 golang 的公司
    mengzhuo
        16
    mengzhuo  
       13 小时 46 分钟前   ❤️ 2
    吵半天,就没人看看官方文档?

    https://go.dev/doc/modules/layout

    还有这个 https://go.dev/doc/
    yiqiao
        17
    yiqiao  
       13 小时 45 分钟前
    @lesismal #6 我靠。我好像就是这种结构,那么有没有其他推荐结构呢?#8 给的可以吗?
    lasuar
        18
    lasuar  
       13 小时 44 分钟前   ❤️ 1
    有技术情节,咋个连有文档的 gorm 事务都搞不定?怎么个事儿
    lesismal
        19
    lesismal  
       13 小时 42 分钟前
    @yiqiao go 的代码没像 java 那么臃肿,这种审美问题,符合团队的标准和自己的喜好不影响效率就行。如果已经在用并且习惯了,不改也没问题,实用主义
    body007
        20
    body007  
       13 小时 38 分钟前   ❤️ 1
    把 gf 官方文档看完,只用 gf 一个库就行。
    wkong
        21
    wkong  
       13 小时 33 分钟前
    你这样一问,我必须推荐下自己的开源项目: https://github.com/WuKongIM/WuKongIM
    wkong
        22
    wkong  
       13 小时 32 分钟前
    Go 写 CRUD 可能不如 Java ,写 IM 还是很爽。
    MagicLi
        23
    MagicLi  
       13 小时 30 分钟前
    Java 推荐这个啦,https://goframe.org/ ,其他的慢慢来,找其他优秀项目来参考。
    Hilalum
        24
    Hilalum  
       13 小时 27 分钟前   ❤️ 1
    别骂外包,对外包好点
    R0sin
        25
    R0sin  
       13 小时 22 分钟前
    用过 v 友推荐的 https://github.com/go-nunu/nunu
    个人感觉用于学习和快速开发都还不错
    strobber16
        26
    strobber16  
       13 小时 19 分钟前 via Android
    gorm bug 血多,建议别用
    pkoukk
        27
    pkoukk  
       13 小时 2 分钟前   ❤️ 1
    我建议你看一眼 prometheus 的源码: https://github.com/prometheus/prometheus
    上面哪个项目代码质量能比 prometheus 好?
    懂了么?根据你的项目而定,想怎么摆怎么摆,go 没那么多限制
    sakurawzt
        28
    sakurawzt  
       13 小时 1 分钟前
    和我一样,我也想写个 go 的项目,最后发现没有适合的项目结构,没有和 springboot 这样一统江湖的存在。
    gufeng311
        29
    gufeng311  
       12 小时 57 分钟前
    小项目直接平铺就行了,你就是想得太多
    ninjashixuan
        30
    ninjashixuan  
       12 小时 54 分钟前
    加点 internal 以及注意避免循环依赖,剩下的根据业务自己发挥了。
    thisisgpy
        31
    thisisgpy  
    OP
       12 小时 35 分钟前
    @lasuar 因为现在写代码不是我的 KPI 了,我只追求结果。不像以前还干开发的时候,要去搞懂技术细节。
    thisisgpy
        32
    thisisgpy  
    OP
       12 小时 34 分钟前
    @strobber16 我也用过 sqlx 。习惯于 java 的 mybatis ,其实都不太习惯。你有更好的推荐吗?
    Jinnrry
        33
    Jinnrry  
       12 小时 13 分钟前
    @strobber16 然而事实就是除了 grom ,每一个能打的。什么 sqlx 、xorm ,功能上根本就不如 gorm
    Nazz
        34
    Nazz  
       11 小时 48 分钟前
    建议使用全局变量, 显式控制服务加载顺序避免依赖循环, 路由和请求处理, 输入输出定义, 业务逻辑放一个包内
    Nazz
        35
    Nazz  
       11 小时 47 分钟前
    路由框架就用 gin
    lysShub
        36
    lysShub  
       11 小时 20 分钟前
    我去 50k 的星星,绝对是刷的
    biu7
        37
    biu7  
       10 小时 34 分钟前
    快教教我们怎么去国企做信息化项目管理,工资咋样?(项目结构用 kratos 或者 gf 的就行)
    biu7
        38
    biu7  
       10 小时 31 分钟前
    话说这么多层楼,orm 没有一个用 ent 的吗?
    gitrebase
        39
    gitrebase  
       10 小时 28 分钟前
    在 Go “使用 struct 或 func 需要加上 package 包名前缀”的前提下,建议扁平化组织结构:即以一个领域为一个 package ,将各个文件**扁平地**分布在这个文件夹下(没必要就不需要加第二层文件夹)
    qloog
        40
    qloog  
       10 小时 27 分钟前
    wangritian
        41
    wangritian  
       10 小时 7 分钟前
    goframe 不错很多人推荐了,小项目建议只分 controller service model 三层
    zhoujx
        42
    zhoujx  
       9 小时 59 分钟前
    你写的代码量有多少?很复杂吗?如果只是玩玩的,直接不用分目录了,直接干
    zhoujx
        43
    zhoujx  
       9 小时 58 分钟前
    先平铺,以后项目大了再找个合适的框架再调整就行了
    leonshaw
        44
    leonshaw  
       9 小时 46 分钟前 via Android
    @laikick 原来如此,我说怎么那么多项目喜欢放个 pkg 目录,跟 src/main 一样简直是脱了裤子放屁。
    bulo
        45
    bulo  
       9 小时 29 分钟前
    工作十年还在纠结语言??
    harlen
        46
    harlen  
       8 小时 20 分钟前
    @thisisgpy sqlc + ent
    fxjson
        47
    fxjson  
       8 小时 13 分钟前
    https://github.com/fanqingxuan/go-gin, 我自己用 gin+gorm+go-redis 库开发的一个开箱即用框架,个人感觉比较适合小项目
    bug123
        48
    bug123  
       8 小时 12 分钟前
    写了十几年 golang ,都是一把梭哈

    - view
    -- base
    -- ...

    - static
    -- js
    -- css
    -- ...

    - controller
    -- ...

    - utils
    -- ...

    main.go
    run.sh
    ...
    thisisgpy
        49
    thisisgpy  
    OP
       8 小时 11 分钟前
    @bulo 我是不再依靠写代码维生,也没太多兴致去探索技术。现在只是还有一点情怀,想着方便自己,做点小东西,所以看 golang 简洁,就想着拿来用。至于说帖子的主题,其实也是没有从 java 复杂的项目结构思维中脱离出来,所以来提问寻求指点。
    thisisgpy
        50
    thisisgpy  
    OP
       8 小时 9 分钟前
    @biu7 我高中学文科,大学读的金融,毕业搞了 10 年开发,挺离谱的经历。然后我口才蛮好,文笔也不错,所以转国企就比较顺当。
    strobber16
        51
    strobber16  
       8 小时 3 分钟前 via Android
    @thisisgpy 没有,建议放弃 orm ,用标准库 sql
    xfurther01
        52
    xfurther01  
       7 小时 48 分钟前
    https://github.com/zeromicro/go-zero
    这个国内的开源项目,基本上和我现在公司自研的一套在思想上大同小异
    qq1340691923
        53
    qq1340691923  
       7 小时 48 分钟前
    如果不忙的话并且想学 go 的话,可以用 go 给 ElasticView 写插件,插件模板工程地址: https://github.com/1340691923/eve-plugin-vue3-template
    durban126
        54
    durban126  
       7 小时 38 分钟前
    Felldeadbird
        55
    Felldeadbird  
       7 小时 5 分钟前   ❤️ 1
    写 go 把 go 当成面向过程,全是在调用函数 就没那么大负担了。

    gorm 事务不是很简单吗。跟着文档声明就好了。
    extrem
        56
    extrem  
       6 小时 39 分钟前
    理解你的想法,但是建议你多想想为什么要这么做

    就是说,要写代码直接去写就好了,不是一定遵循什么“项目结构”才能写,如果说项目到了那个地步你自然不会再纠结这个问题

    另外,别用 gorm ,直接用最原始的 sql 拓展如 sqlx
    linyuyizhizou
        57
    linyuyizhizou  
       6 小时 31 分钟前
    建议学学 Rails 。
    CinHaiZio
        58
    CinHaiZio  
       5 小时 30 分钟前
    pkg 放公用, 框架 初始化方法, 工具类, 配置, app 放业务逻辑, 什么 ctrl,service 可以塞这,其他玩意也可以塞这, app/cmd 放启动的,

    完啦, 加个 script, config, resource, 加个 deploy 放 nginx.conf,dockercompose

    模块化就/app/{module}/cmd/main.go 咯
    kevinpendragon
        59
    kevinpendragon  
       5 小时 14 分钟前
    其实大佬写小项目也是一把梭。。。结构本身不是很值得纠结的东西
    LanhuaMa
        60
    LanhuaMa  
       4 小时 38 分钟前
    @laikick #11 他对不对看点赞数就知道,你算哪根葱要你来确认他是对的?
    laikick
        61
    laikick  
       4 小时 27 分钟前
    @LanhuaMa 那咋了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:42 · PVG 05:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.