猿问

指针引用未存储在我的 go 程序中的结构中

我是 go-lang 的新手,我试图弄清楚如何正确使用结构和依赖注入。我有点卡住了,因为我无法正确存储对另一个结构的引用。


这是我生成 CommandController 的方法。存在对 iris.Application 的有效引用。


func ProvideCommandController(application *iris.Application, commandRepository command.CommandRepository) (*interfaces.CommandController, error) {

commandController := interfaces.CommandController{}

commandController.Init(application, commandRepository)

commandController.Start()

return &commandController, nil

}


该结构如下所示:


type CommandController struct {

    commandRepository command.CommandRepository

    app   *iris.Application

}


func (c CommandController) Init(app *iris.Application, repository command.CommandRepository) {

    c.app = app

    c.commandRepository = repository

}


func (c CommandController) Start() {

    c.app.Get("/command", c.readAll)

    c.app.Get("/command/{id:string}/execute", c.executeCommand)


    c.app.Run(iris.Addr(":8080"))

}

当ProvideCommandController函数被执行时,我可以调试并观察到所有引用看起来都很好。不幸的是,commandController.Start()由于c.app为零而失败。


我错过了什么理解?不知何故,存储的引用在 Init 和 Start 函数调用之间被删除。


提前致谢 :)


慕尼黑的夜晚无繁华
浏览 74回答 1
1回答

青春有我

改变func (c CommandController) Init(app *iris.Application, repository command.CommandRepository)到func (c *CommandController) Init(app *iris.Application, repository command.CommandRepository)由于在您的版本中按值Init接收,因此它所做的任何更改都不会出现在方法之外。ccInit
随时随地看视频慕课网APP

相关分类

Go
我要回答