2016-11-17 95 views
0

我是初學者。我在函數列表中創建了一個結構體的對象數組,並將該對象數組的地址傳遞給另一個函數changelist。在我的函數changelist中,我將它作爲pointer.I想要編輯該函數內傳遞的數組對象的一些字段更改列表並將其傳遞迴被調用的函數列表。當我嘗試在我調用的函數中訪問它時,我無法從更改列表函數訪問更新的版本。無法訪問在另一個函數中更改的結構體字段

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是修改複製版本。可以有人請指出我在正確的方向如何實現這一目標..謝謝。

+3

第一:通過圍棋的整體旅遊工作(HTTPS ://tour.golang.org/)。第二:不要使用指向切片的指針。第三。再去一趟。第四:for循環中的'r'是地址列表元素的副本:當變更片時,使用'for i:= range slice'。再次去旅行。 – Volker

+1

我建議你在寫任何東西之前多閱讀一下語言規範 –

+0

謝謝volker。我認爲你的建議幫助了我很多。將學習更多..感謝 –

回答

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

這是我的代碼,它不完美,但工作正常。
有些事情你錯了。

  1. 「功能」不是關鍵字,您應該使用「func」代替。
  2. 您使用changedlist調用函數Changedlist
  3. in for循環中,變量r是數組項的副本,所以如果你改變了它,數組不會受到影響,我在這裏用(*addressList)[k] = r來改變數組。此外,您還可以用像(*addressList)[k].Name = xxx指數修改,而不會使用r

這是所有
希望這可以幫助你......

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

+0

謝謝.....這解決了它 –

相關問題