Насколько я понимаю,
Read at 0x00c0000f8d68 by goroutine 8:
и Previous write at 0x00c0000f8d68 by goroutine 7
означает, что обе программы: 8
и 7
читают и пишут в одном месте,Если вы посмотрите на линии, на которые указывает ошибка:
goroutine 8
на 116
:
if t.status != models.AttackResponseStatusRunning {
goroutine 7
на 107
:
t.status = models.AttackResponseStatusRunning
Вы можете видеть, что подпрограммы получают доступ к состоянию task
без какой-либо синхронизации и, как вы уже знаете, могут вызвать состояние гонки.
Таким образом, если ваша программа разрешает доступ к одной задаче несколькими процедурами, вам необходимо убедиться, что при использовании блокировки мьютекса не происходит гонки данных.