Go语言(golang)结构变量未更新

时间:2014-02-14 18:14:55

标签: struct go channel

我在测试代码中有一个数组

arr := []Server{}

请求arr [0] .GetId()

服务器是一个接口。 ServerInstance是一个实现接口方法的结构,即

func (serv ServerInstance) GetId() int {
    return serv.Id
}

我有像

这样的goroutine
func (serv *ServerInstance) someFunc

正在更新struct的变量'Id'。我确信价值正在更新为 -

serv.Id=23445

但这并未反映在第3行的电话中

*更新***

for somecondition {
     arr=append(arr,FuncReturningServerIntercae() // calling this invokes goroutine which keeps updating `Id` very frequently
}


for {
   for _,s := range arr {
        print s.GetId()   // ** No Update **
     }
    sleep(some duration)
}

**示例** http://play.golang.org/p/zUqJ0hEjxv

1 个答案:

答案 0 :(得分:1)

您在附加结构时复制结构,而不是在示例中将结构放置到结构本身。 http://play.golang.org/p/rQz9RLTzMU - 按预期工作是吗? 进一步的信息:Golang是一种按值传递的语言,所以如果你正在使用goroutines而你想要保持数据的神圣性,你最好使用指针。