Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: zero copy, slice semantics, mmap

Как работает zero-copy в Go и когда можно передавать данные между слоями без выделений памяти?

Проверяет понимание сетевых оптимизаций, io.Reader/io.Writer, mmap, slice semantics и передачи буферов по ссылке.

Короткий ответ

Zero-copy — это механизм передачи данных между компонентами без копирования. В Go это возможно через slices, io.Reader/io.Writer, sendfile(), mmap. Используется для больших файлов и сетевого IO.

Длинный ответ

Zero-copy снижает нагрузку на CPU, улучшает пропускную способность и уменьшает задержки.

Где zero-copy доступен в Go

1. 

Slices

Slice — это обёртка над массивом.

Передача slice по значению не копирует данные:

func process(b []byte) { /* b shares underlying array */ }

2. 

io.Reader / io.Writer

Большинство операций принимают большие буферы и пишут прямо в них.

3. 

sendfile()

Go вызывает системный вызов sendfile, который позволяет отправлять файлы в сокет без копий в user space.

io.Copy(outConn, inFile) // под капотом sendfile

4. 

mmap

Можно memory-map’ить файлы и читать их в виде массива байт, не загружая в память полностью.

5. 

bytes.Buffer reuse

Повторное использование буферов через sync.Pool.

Когда zero-copy невозможен

Если вы меняете размер slice или делаете append — Go может делать realloc.

Вывод

Zero-copy — мощный способ оптимизации больших данных. Важно проектировать API так, чтобы не копировать буферы понапрасну.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#zero copy

#slice semantics

#mmap

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.