его нет, и мне кажется что его тут не будет, но что-то мне подсказывает, что лучше уточнить:
items = make([]Item, 0)
for {
// откуда-то берем item, не важно
items = append(items, item)
if len(items) == 100 {
// отправляем слайс в канал, и тут же создаем новый пустой слайс
itemsChan <- items
items = make([]Item, 0)
}
}
по идее всё ок items = make([]Item, 0) можно переписать как items = make([]Item, 0, 100) – тогда не будет избыточных аллокаций при аппенде
Не будет. Тут items у тебя variable binding, в сам слайс - variable value. Когда len(items) == 100 ты отправляешь старый variable value в канал, а за variable binding item закрепляешь новое variable value. Датарейс возникает если ты одновременно читаешь/пишешь в одно и то же variable value. Здесь такого нет, потому что value, уехавшее в канал, и value, которые ты потом присваиваешь items - 2 совсем разных значения.
ну если ты пишешь в слайс до того, как его начнут читать на другом конце канала, то ок
Обсуждают сегодня