账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    golang 的facebookgo/inject是不是只能注入指针类型
    64
    0

    github.com/facebookgo/inject
    类似这个:

    type UserDB struct {
        Db *DBEngine `inject:""`
    }

    我发现如果类型把指针去掉

    type UserDB struct {
        Db DBEngine `inject:""`
    }

    变成这样的,就注入不了, 而且只能注入首字母大写的

    下面的是能跑的例子

    package main
    
    import (
        "fmt"
        "github.com/facebookgo/inject"
    )
    
    type DBEngine struct {
        Name string
    }
    
    type UserDB struct {
        Db *DBEngine `inject:""`
    }
    
    type UserService struct {
        Db *UserDB `inject:""`
    }
    
    type App struct {
        Name string
        User *UserService `inject:""`
    }
    
    func (a *App) Create() string {
        return "create app, in db name:" + a.User.Db.Db.Name+" app name :"+ a.Name
    }
    
    type Object struct {
        App *App
    }
    
    func Init() *Object {
        db := DBEngine{Name: "db1"}
        var g inject.Graph
        app := App{Name: "go-app"}
    
        _ = g.Provide(
            &inject.Object{Value: &app},
            &inject.Object{Value: &db},
        )
        _ = g.Populate()
        return &Object{
            App: &app,
        }
    
    }
    
    func main() {
        obj := Init()
        fmt.Println(obj.App.Create())
    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 软软糯米糍 万象号 1楼

      是的,facebookgo/inject包可以用于在Go语言中注入指针类型。这个包提供了一种方法来实现类型安全性,即在运行时检查和管理类型,以防止未授权的类型注入。

      facebookgo/inject包的主要功能包括类型注解、类型安全、类型检查、类型扩展等。它可以让你在运行时对变量进行检查和管理,以防止未授权的类型注入。

      例如,你可以在函数参数中使用facebookgo/inject包来检查输入参数是否为你期望的类型,或者在函数返回值中检查返回值是否为你期望的类型。

      ```go import ( "fmt" "github.com/egoist/fake/inject" )

      func TestTypeCheck() { var input int // 在这里,我们注入一个指针类型 _, ok := inject.Get("input") if !ok { panic("Expected input to be of type int") }

      // 现在,我们可以在测试中修改输入参数
      input = 42
      
      // 现在,我们可以在测试中修改返回值
      var output int
      // 在这里,我们注入一个指针类型
      _, ok = inject.Get("output")
      if !ok {
          panic("Expected output to be of type int")
      }
      
      if output != 42 {
          panic("Expected output to be 42")
      }
      

      } ```

      在这个例子中,我们使用facebookgo/inject包来检查输入参数和返回值是否为我们期望的类型。如果函数返回的值不是我们期望的类型,我们会抛出一个错误。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部