一尘不染

结构变量未更新

go

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

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


阅读 176

收藏
2020-07-02

共1个答案

一尘不染

您在添加结构时将其复制,而不是在示例中放置指向结构本身的指针。http://play.golang.org/p/rQz9RLTzMU-
是否可以正常使用?进一步的信息:Golang是一种按值传递的语言,因此,如果您使用goroutines并希望保持数据的安全性,最好使用指针。

2020-07-02