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

依赖注入 or 全局变量

  •  
  •   ultimate42 · Aug 6, 2025 · 3160 views
    This topic created in 461 days ago, the information mentioned may be changed or developed.

    最近在学习 go 语言,在使用 db 和限定返回结果时,先是参照了 gin-vue-admin,使用了全局变量,这样使用的确很简单,但每次都要引入全局包,看站内帖子又说不使用依赖注入不好做单元测试,所以你们倾向哪种方案?

    1. 全局变量
    // hanlder
    
    resp := response.PageResponse{
        List:     users,
        Total:    total,
        Page:     p,
        PageSize: ps,
    }
    
    response.SuccessPage(c, resp)
    
    // service
    
    global.DB.First...
    
    
    1. 依赖注入
    // hanlder
    // func (h *UserHandler)...
    
    resp := h.PageResponse()
    resp.List = users
    resp.Total = total
    resp.Page = req.Page
    resp.PageSize = req.PageSize
    
    h.SuccessPage(c, resp)
    
    // service 
    // func (userService *UserService) ...
    
    userService.db.first...
        
    
    1. 最简单的方式
    c.JSON( http.StatusOK, gin.H{
        "list":     users,
        "total":    total,
        "page":     req.Page,
        "pageSize": req.PageSize,
    })
    
    CoderGeek
    CoderGeek
    Aug 6, 2025
    1
    一直在用 uber-go/fx
    ultimate42
    ultimate42
    OP
    Aug 6, 2025
    2
    @CoderGeek 我也是用的 fx ,因为对 go 不熟悉,代码还是参考 ai 的,勉强算是跑起来了
    fgk
    fgk
    Aug 6, 2025
    3
    一个人写就全局变量,方便。
    多人协同依赖注入,避免问题
    fruitmonster
    fruitmonster
    Aug 6, 2025
    4
    我最开始就是用的全局变量,初始化的时候全部都初始化为全局变量,然后 Gemini 一顿给我优化,优化的晚就是依赖注入,感觉全局变量更容易理解,依赖注入更容易单元测试
    fengyj
    fengyj
    Aug 6, 2025❤️1
    5
    wire 依赖注入
    hwdq0012
    hwdq0012
    Aug 6, 2025
    6
    应该抽象的就依赖注入没啥 好说的, 全局变量+里氏替换 不如直接依赖注入
    darksword21
    darksword21
    Aug 6, 2025
    7
    如果你在写的项目是公司的并且已经很大了且已经有依赖注入的机制那就依赖注入

    其他时候:全局变量
    bv
    bv
    Aug 6, 2025
    8
    1. 不要 x 场景用全局变量,y 场景用依赖注入,就养成个用依赖注入的习惯。
    2. 依赖注入框架不一定要用什么框架。
    changz
    changz
    Aug 6, 2025 via Android
    9
    全局变量写飞容易出现 cycle import 问题
    moooooooo
    moooooooo
    Aug 6, 2025
    10
    这是 or 的问题吗?为什么要用全局变量啊
    picone
    picone
    Aug 6, 2025
    11
    @changz 循环引用和是否用依赖注入没关系。 就算是依赖注入该引用的还是引用。
    ultimate42
    ultimate42
    OP
    Aug 6, 2025
    12
    @moooooooo 我是新手呀,在参考 gin-vue-admin 的实现,但这个项目我看着很难受。数据库字段是驼峰和下划线连接混用,返给客户端的数据也是大小写开头都有
    wfhtqp
    wfhtqp
    Aug 6, 2025
    13
    context
    MagicLi
    MagicLi
    Aug 6, 2025
    14
    看一个比较简单的依赖库,https://github.com/samber/do
    wire 适合大规模项目。
    5261
    5261
    Aug 6, 2025
    15
    这也是之前遇到的问题,目前还是用 fx 依赖注入,只不过写的时候有点麻烦
    Gilfoyle26
    Gilfoyle26
    Aug 6, 2025
    16
    《不好做单元测试》在公司里面,我从来没有写过测试代码,代码还没上线,团队就没了,又到新的项目了
    fgwmlhdkkkw
    fgwmlhdkkkw
    Aug 6, 2025 via Android
    17
    额,也推荐一下我写的依赖注入。

    https://github.com/zzztttkkk/dic
    changz
    changz
    Aug 7, 2025 via Android
    18
    @picone 我说的是“全局变量容易出现 cycle import”,而不是“依赖注入能解决什么问题”。而且是“容易”,不是“一定会”。至于为什么,这是工程实践问题,麻烦自己问一下 ai 。
    meepolee
    meepolee
    Aug 14, 2025
    19
    可以对比 gin-vue-admin 和 gin-admin 的代码感受下依赖注入和全局的异同,项目小,全局足以,多人合作或者项目大了,依赖注入是最好的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1099 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 23:01 · PVG 07:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.