【发布时间】:2020-02-17 17:12:35
【问题描述】:
我有一个用 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的值将始终是指向同一个循环变量的指针,所以当 goroutine 引用它时,它总是会看到变量的值在那一刻有。