我在测试代码中有一个数组
arr := []Server{}
要求arr [0] .GetId()
服务器是接口。ServerInstance是实现接口方法的结构,即
func (serv ServerInstance) GetId() int { return serv.Id }
我有一个像
func (serv *ServerInstance) someFunc
这正在更新结构的变量“ 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
您在添加结构时将其复制,而不是在示例中放置指向结构本身的指针。http://play.golang.org/p/rQz9RLTzMU- 是否可以正常使用?进一步的信息:Golang是一种按值传递的语言,因此,如果您使用goroutines并希望保持数据的安全性,最好使用指针。