猿问

实现接口功能时结构域未更新

例如,如果我们有以下接口:


type IRoute interface {

    AddChildren(child IRoute)

}

以下结构:


type Route struct {

    Alias string `json:"alias"`

    Children []Route `json:"children,omitempty"`

    Url string `json:"url,omitempty"`

}

并实现了接口:


func (this Route) AddChildren (child globals.IRoute){

    this.Children = append(this.Children, child.(Route))

}

然后在我们的主函数中,如果我们想测试它是行不通的:


rSettings := Route{"settings", nil, "/admin/settings"}

rSettingsContentTypesNew := models.Route{"new", nil, "/new?type&parent"}

rSettingsContentTypesEdit := models.Route{"edit", nil, "/edit/:nodeId"}


// Does NOT work - no children is added

rSettingsContentTypes.AddChildren(rSettingsContentTypesNew)

rSettingsContentTypes.AddChildren(rSettingsContentTypesEdit)

rSettings.AddChildren(rSettingsContentTypes)

这确实按预期工作:


rSettings := Route{"settings", nil, "/admin/settings"}

rSettingsContentTypesNew := models.Route{"new", nil, "/new?type&parent"}

rSettingsContentTypesEdit := models.Route{"edit", nil, "/edit/:nodeId"}


// However this does indeed work

rSettingsContentTypes.Children = append(rSettingsContentTypes.Children,rSettingsContentTypesNew)

rSettingsContentTypes.Children = append(rSettingsContentTypes.Children,rSettingsContentTypesEdit)

rSettings.Children = append(rSettings.Children,rSettingsContentTypes)

我错过了什么?:-)


米脂
浏览 190回答 1
1回答

慕虎7371278

的接收者func (this Route) AddChildren (child globals.IRoute)是一个值,因此您正在更改Route结构的副本。将其更改为 func (this *Route) AddChildren (child globals.IRoute)
随时随地看视频慕课网APP

相关分类

Go
我要回答