无法访问在另一个函数中更改的结构字段

cannot access the struct field changed in another function

我是 Go 语言的初学者。我在函数列表中创建了一个结构的对象数组,并将该对象数组的地址传递给另一个函数 changelist.In 我的函数更改列表我得到它是因为 pointer.I 想编辑传递数组的一些字段此函数更改列表中的对象并将其传递回被调用函数list.When我尝试在我的被调用函数中访问它我无法从更改列表函数访问更新版本。

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
   }

这里我期待的是名字,当我在我的列表中得到这个时,状态将变为真 function.But 它是假的,这是 bool.This 的默认值意味着更改未对实际数组完成 struct.It 正在修改复制的 version.Can 有人请指出正确的方向如何实现这一点..谢谢。

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}]

这是我的代码,它并不完美,但可以正常工作。
有些事情你弄错了。

  1. "function" 不是关键字,您应该使用 "func" 代替。
  2. 您用 changedlist 调用函数 Changedlist
  3. 在for循环中,变量r是数组项的副本,所以如果你改了,数组不受影响,我这里用(*addressList)[k] = r改数组。此外,您可以使用 (*addressList)[k].Name = xxx 之类的索引对其进行修改,而无需使用 r

就这些了
希望这可以帮助你...

https://play.golang.org/p/zAJ5aJpwwA