2014-02-14 4 views
0

У меня есть массив в тестовом кодеGo язык (golang) переменная структура не обновляется

arr := []Server{} 

который просит обр [0] .GetId()

Сервер представляет собой интерфейс. ServerInstance является структурой реализации способа интерфейса, т.е.

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

У меня есть goroutine как

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

+1

ну, вы уверены, но вам нужно будет показать код для somone, чтобы помочь – Arjan

+0

Какую часть вы сомневаетесь? –

+0

Если вызов в строке 3 находится в отдельной версии goroutine, возможно, что ваш идентификатор еще не обновлен? – weberc2

ответ

1

Вы копируете структуры при обращении вместо того, чтобы помещать указатели на сами структуры в примере. http://play.golang.org/p/rQz9RLTzMU - работает по назначению да? Дополнительная информация: Golang - это язык с перекрестными знаками, поэтому, если вы используете goroutines и хотите сохранить неприкосновенность своих данных, вам лучше использовать указатели.

+0

Спасибо. Но как насчет этого? [link] (http://play.golang.org/p/IyfuYsgN3-) –

+0

Я получаю «Snippet not found» из этой ссылки. – Stasis

+0

еще раз проверьте. ссылка обновлена ​​ –

Смежные вопросы