Получатель может читать тот же массив, пока отправитель уже перезаписывает его новым пакетом. Обнуление длины среза не создаёт независимую копию данных.
Как безопасно накапливать и отправлять буфер
Получатель может читать тот же массив, пока отправитель уже перезаписывает его новым пакетом. Обнуление длины среза не создаёт независимую копию данных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Обработчик Go добавляет сообщения в []byte и отправляет пакет в goroutine записи при достижении лимита. Затем он обнуляет длину и использует тот же backing array. Какой риск возникает?
Ответ
Получатель может читать тот же массив, пока отправитель уже перезаписывает его новым пакетом. Обнуление длины среза не создаёт независимую копию данных.
Перед передачей скопируйте пакет либо передайте владение всем буфером и начните новый. Пул буферов допустим только с возвратом после полного завершения чтения. Ограничьте размер и время ожидания пакета, а при завершении отправьте остаток. Сам канал синхронизирует передачу, но не запрещает последующие конкурентные изменения массива.