【发布时间】:2017-03-31 15:17:11
【问题描述】:
我是 go lang 的初学者。我在函数列表中创建了一个结构的对象数组,并将该对象数组的地址传递给另一个函数更改列表。在我的函数更改列表中,我将它作为指针获取。我想编辑此函数内传递的数组对象的一些字段changedlist 并将其传递回被调用函数列表。当我尝试在被调用函数中访问它时,我无法从 changedlist 函数访问更新版本。
Here is my code
type Mail struct {
Name string
Address string
Status bool
Error error
}
function List(){
var addressList = make([]Mail,2)
addressList[0].Name = "Name"
addressList[0].Address = "Address"
addressList[1].Name = "Name1"
addressList[1].Address = "Address"
newAddress:=changedlist(&addressList)
fmt.Println(newAddress)
}
function Changedlist(addressList *[]Mail)*[]Mail{
for _,r:=range *addressList{
if r.Name=="Name1"{
r.Status=false
r.err=errors.New("Error in the name")
continue
}
r.Status=true
r.Error=nil
}
return addressList
}
这里我期望的是名称,当我在列表函数中得到它时,状态将变为 true。但它是 false,这是 bool 的默认值。这意味着更改不是对实际的数组结构。它正在修改复制的版本。有人可以指出正确的方向如何实现这一点..谢谢。
【问题讨论】:
-
第一:完成整个围棋之旅 (tour.golang.org)。第二:不要使用指向切片的指针。第三。再次游览。第四:for 循环中的
r是地址列表元素的副本:当改变切片时使用for i := range slice。再次环游世界。 -
我建议你在写任何东西之前阅读更多关于语言规范的内容
-
感谢沃尔克。我认为你的建议对我很有帮助。会学到更多......谢谢
标签: arrays pointers go struct slice