我是初学者。我在函数列表中创建了一个struct的对象数组,并将该对象数组的地址传递给另一个函数changelist。在我的函数changelist中,我将它作为指针。我想编辑这个函数中传递的数组对象的一些字段更改列表并将其传递回被调用的函数列表。当我尝试在我的被调用函数中访问它时,我无法从更改列表函数访问更新版本。
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
}
这里我期待的是名字,当我在我的列表函数中得到这个时,状态将变为真。但是它是假的,这是bool的默认值。这意味着更改不是对实际的数组struct.It正在修改复制的版本。有人请指出我正确的方向如何实现这一点。谢谢。
答案 0 :(得分:0)
package main
import (
"errors"
"fmt"
)
type Mail struct {
Name string
Address string
Status bool
Error error
}
func List() {
var addressList = make([]Mail, 2)
addressList[0].Name = "Name"
addressList[0].Address = "Address"
addressList[1].Address = "Address"
addressList[1].Name = "Name1"
fmt.Println(addressList)
newAddress := Changedlist(&addressList)
fmt.Println(newAddress)
}
func Changedlist(addressList *[]Mail) *[]Mail {
for k, r := range *addressList {
if r.Name == "Name1" {
r.Status = false
r.Error = errors.New("Error in the name")
(*addressList)[k] = r
continue
}
r.Status = true
r.Error = nil
(*addressList)[k] = r
}
return addressList
}
func main() {
List()
}
// output
[{Name Address false <nil>} {Name1 Address false <nil>}]
&[{Name Address true <nil>} {Name1 Address false Error in the name}]
这是我的代码,它并不完美,但工作正常 有些事情你错了。
Changedlist
调用函数changedlist
。 r
是数组项的副本,因此如果更改它,数组不会受到影响,我在这里使用(*addressList)[k] = r
来更改数组。此外,您可以使用(*addressList)[k].Name = xxx
等索引修改它,而不使用r
那都是 希望这可以帮助你...