Вариант использования
Я хочу сохранить много данных в базе данных MySQL, которые я получаю по каналу.По соображениям производительности я обрабатываю их партиями по 10 штук.Я получаю входные данные только каждые 3 часа.
Проблема
Предполагая, что я получу 10004 предмета, останется 4 предмета, потому что моя процедура go ждет 10 предметов, прежде чем она "сбросит их" в партии,Я хочу убедиться, что он создает пакет с менее чем 10 элементами на случай, если в этом канале больше нет элементов (канал также будет закрыт производителем).
Код:
// ProcessAudits sends the given audits in batches to SQL
func ProcessAudits(done <-chan bq.Audit) {
var audits []bq.Audit
for auditRow := range done {
user := auditRow.UserID.StringVal
log.Infof("Received audit %s", user)
audits = append(audits, auditRow)
if len(audits) == 10 {
upsertBigQueryAudits(audits)
audits = []bigquery.Audit{}
}
}
}
Я новичок в Go, и я не уверен, как бы я это правильно реализовал?