我是Golang的新手。我有这个简单的代码,我无法上班;问题是在调用方法LoadGroups
之后," main"功能没有看到变化:
package main
import "fmt"
type Group struct {
Name string
}
type Configuration struct {
Groups []Group
}
func NewConfiguration() (error, *Configuration) {
conf := Configuration{}
conf.LoadGroups()
fmt.Print("Final number of groups: ", len(conf.Groups))
return nil, &conf
}
func (conf Configuration) LoadGroups() {
for i := 0; i < 5; i++ {
conf.Groups = append(conf.Groups, Group{Name: "Group " + string(i)})
fmt.Println("Current number of groups: ", len(conf.Groups))
}
}
func main() {
NewConfiguration()
}
答案 0 :(得分:4)
您正在修改配置的副本,而不是配置本身。
方法LoadGroups
应该采用指向配置的指针:
package main
import "fmt"
type Group struct {
Name string
}
type Configuration struct {
Groups []Group
}
func NewConfiguration() (error, *Configuration) {
conf := &Configuration{}
conf.LoadGroups()
fmt.Print("Final number of groups: ", len(conf.Groups))
return nil, conf
}
func (conf *Configuration) LoadGroups() {
for i := 0; i < 5; i++ {
conf.Groups = append(conf.Groups, Group{Name: "Group " + string(i)})
fmt.Println("Current number of groups: ", len(conf.Groups))
}
}
func main() {
NewConfiguration()
}
答案 1 :(得分:1)
LoadGroups
方法必须是*Configuration
的接收方,而不是Configuration
。现在,每次调用LoadGroup
的新副本时都会执行方法Configuration
,因此其更改不会反映在原始调用方中。通过使其类型为*Configuration
,对共享相同指针的方法LoadGroups
的所有调用都会更改相同的Configuration
实例。