У меня есть фрагмент кода Go с 3 различными функциями: insertInto Mysql, updateRow Mysql и deleteRow mysql. Я проверяю тип операции и запускаю одну из этих функций по мере необходимости.
Я хочу преобразовать свои обычные функции в go подпрограммы, чтобы иметь возможность обрабатывать больше операций.
Но вот в чем проблема:
Если я преобразую в процедуры, я потеряю последовательность операций.
Например, операции вставки выполняются гораздо чаще, чем операции удаления и Операции вставки ставятся в очередь в канале вставки, пока канал удаления пуст, поэтому мой код может попытаться удалить строку до того, как она будет вставлена (например, вставлена строка и удалено 1 se c позже).
Любые идеи о том, как убедиться, что последовательность моих операций на mysql совпадает с полученными операциями.
вот код:
go insertIntoMysql(insertChan, fields, db, config.DestinationTable)
go updatefieldMysql(updateChan, fields, db, config.DestinationTable)
go deleteFromMysql(deleteChan, fields, db, config.DestinationTable)
for !opsDone {
select {
case op, open := <-mysqlChan:
if !open {
opsDone = true
break
}
switch op.Operation {
case "i":
//fmt.Println("got insert operation")
insertChan <- op
break
case "u":
fmt.Println("got update operation")
updateChan <- op
break
case "d":
fmt.Println("got delete operation")
deleteChan <- op
break
case "c":
fmt.Println("got command operation")
//no logic yet
break
}
break
}
}
close(done)
close(insertChan)
close(deleteChan)
close(updateChan)
}