V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ultimate42
V2EX  ›  Go 编程语言

依赖注入 or 全局变量

  •  
  •   ultimate42 · 10 天前 · 1320 次点击

    最近在学习 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
        1
    CoderGeek  
       10 天前
    一直在用 uber-go/fx
    ultimate42
        2
    ultimate42  
    OP
       10 天前
    @CoderGeek 我也是用的 fx ,因为对 go 不熟悉,代码还是参考 ai 的,勉强算是跑起来了
    fgk
        3
    fgk  
       10 天前
    一个人写就全局变量,方便。
    多人协同依赖注入,避免问题
    fruitmonster
        4
    fruitmonster  
       10 天前
    我最开始就是用的全局变量,初始化的时候全部都初始化为全局变量,然后 Gemini 一顿给我优化,优化的晚就是依赖注入,感觉全局变量更容易理解,依赖注入更容易单元测试
    huiyifyj
        5
    huiyifyj  
       10 天前   ❤️ 1
    wire 依赖注入
    hwdq0012
        6
    hwdq0012  
       10 天前
    应该抽象的就依赖注入没啥 好说的, 全局变量+里氏替换 不如直接依赖注入
    darksword21
        7
    darksword21  
       10 天前
    如果你在写的项目是公司的并且已经很大了且已经有依赖注入的机制那就依赖注入

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

    https://github.com/zzztttkkk/dic
    changz
        18
    changz  
       9 天前 via Android
    @picone 我说的是“全局变量容易出现 cycle import”,而不是“依赖注入能解决什么问题”。而且是“容易”,不是“一定会”。至于为什么,这是工程实践问题,麻烦自己问一下 ai 。
    meepolee
        19
    meepolee  
       2 天前
    可以对比 gin-vue-admin 和 gin-admin 的代码感受下依赖注入和全局的异同,项目小,全局足以,多人合作或者项目大了,依赖注入是最好的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2371 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:18 · PVG 19:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.