Golang使用dig真的会比直接func注入跟new好?

destinyjingkun · · 3691 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

最近看到公司的项目都在改用dig做di,ioc。我自己很排斥,但是又感觉自己不用很特立独行的感觉,来社区问问诸位大佬,为什么这么多人推崇dig? 使用dig,确实只需要在main,当中provide一次 ```go //main.go func buildContainer() *dig.Container { container := dig.New() container.Provide(models.InitStorager) //container.Provide(api.DI_Tools) return container } ``` 重点是每次需要使用到这个对象的地方都充斥着各种Invoke ``` //router.go var data *models.OperatorUser db.Invoke(func(s *models.Storager) { //w.Header["userid"] data, ok = s.OperatorUser.Get(&models.OperatorUserGetParam{userid, validForm.Owner}) }) var userid string var ok bool db.Invoke(func(s *models.Storager) { Mlok, Mlid := s.OperatorUser.MlidIdGet(validForm.Owner) USeridok, USerid := s.OperatorUser.UseridGet(validForm.Owner) if !Mlok || !USeridok { return } userid = USerid ok = s.OperatorUser.Set(&models.OperatorUserSetParam{ Userid: USerid, Mlud: Mlid, Email: utils.emailBuild(USerid), //// oper_guid@mail.com Avatar: validForm.Avatar, //Phone: Input.Phone, Nickname: validForm.Nickname, Owner: validForm.Owner}) }) //一点都不美观,一点都不美观,一点都不美观 ``` 看到整份代码走哪都能看到Invoke,整个人都不好了,先不说wwcd大牛说的di framework造成的性能影响,光看到这个代码就觉得一点都gopher. ``` //使用new,使用func注入咋了,使用init()咋了 db:=new(models.Storager) db:=InitStorager("config.yml" || config) ``` 感觉都比整份代码都是Invoke好,好歹我还知道我要的啥,nil,panic还好查些。 不懂为何那么多人觉得使用全局变量,使用init就滥用了。 ### *我并不排斥依赖注入,我并不排斥依赖注入,我并排斥依赖注入,重要的事情要说3遍。 感觉go就应该走的是那种大道至简的道,我相信用go写微服务,小工具的还是占大数,没必要一个服务2W行代码能搞定的整成3W行代码。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3691 次点击  
加入收藏 微博
1 回复  |  直到 2021-07-12 21:40:30
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传