我在测试代码中有一个数组
arr := []Server{}
请求arr [0] .GetId()
服务器是一个接口。 ServerInstance是一个实现接口方法的结构,即
func (serv ServerInstance) GetId() int {
return serv.Id
}
我有像
这样的goroutinefunc (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)
}
答案 0 :(得分:1)
您在附加结构时复制结构,而不是在示例中将结构放置到结构本身。 http://play.golang.org/p/rQz9RLTzMU - 按预期工作是吗? 进一步的信息:Golang是一种按值传递的语言,所以如果你正在使用goroutines而你想要保持数据的神圣性,你最好使用指针。