У меня есть функция, написанная на Golang следующим образом
func (participant *SimulationParticipant) StartTransactionsGatewayTicker() {
//Gateway
logging.InfoLogger.Printf("StartTransactionsGatewayTicker:%v", participant.Participant)
ticker := time.NewTicker(1 * time.Second)
participant.TransactionGatewayTicker = ticker
go func() {
for {
select {
case <-ticker.C:
logging.InfoLogger.Printf("Tick at: %v", participant.Participant)
participant.GetTransactions()
}
}
}()
}
Я вызываю функцию в цикле, как с 2 SimulationParticipant в массиве. удивительно, что первый участник заменяется вторым участником, а GetTransactions всегда выполняется до последнего элемента в цикле? Как я могу преодолеть это
participant
всегда будет указателем на одну и ту же переменную цикла, поэтому, когда горутина ссылается на нее, она всегда будет видеть значение переменной в этот момент. - person Andy Schweig   schedule 17.02.2020