📕
Golang
  • Собеседование по golang
  • Вопросы собеседования
    • Список вопросов МТС
    • Список вопросов
    • Базовые вопросы по Golang
    • Go. Прорабатываем 25 основных вопросов собеседования
    • Функции
    • Структуры данных
    • Конкурентность и Параллелизм
    • Горутины
    • Примитивы синхронизации
    • Планировщик
    • Go: конкурентность и привязки к потокам в планировщике
    • Каналы
    • GC
  • спецификация
    • Спецификация Go: преобразования в и из строкового типа
    • переключатель типов (type switch)
    • for утверждения (for statements)
    • for утверждения с range условием
    • go утверждения (go statements)
    • select утверждения (select statements)
    • return утверждения (return statements)
    • continue утверждения (continue statements)
    • goto утверждения (goto statements)
    • fallthrough утверждения (fallthrough statements, утверждения "провала")
    • defer утверждения (defer statements)
    • встроенные функции, функция close
    • длина и емкость
    • аллокация, создание срезов (slice), карт (map) и каналов
    • добавление в срезы и копирование срезов
    • удаление элементов карты
    • обработка паники
    • начальная загрузка (bootstrapping)
    • пакеты
    • инициализация и выполнение программы, нулевое значение
    • инициализация пакета
    • выполнение программы
    • ошибки
    • паника во время выполнения (run-time panic)
  • Эффективный go
    • эффективный go
    • 50 оттенков go
    • Go: распространенные антипаттерны
    • Визуализация concurrency в Go с WebGL
  • требования для работы
    • Список навыков
  • habr
    • Изучаем многопоточное программирование в Go по картинкам
    • Go: конкурентность и привязки к потокам в планировщике
  • NP
    • Полиморфизм с интерфейсами в Golang
    • Объектно-ориентированное программирование в Golang
    • Владеешь merge  -  освой и rebase
  • ProgLib
    • Горутины
  • Untitled
  • Оптимизация
    • Go: Должен ли я использовать указатель вместо копии моей структуры?
  • Полезняшки
    • Using PostgreSQL JSONB with Go
Powered by GitBook
On this page

Was this helpful?

  1. спецификация

аллокация, создание срезов (slice), карт (map) и каналов

Аллокация

Встроенная функция new принимает тип T, выделяет память для переменной этого типа во время выполнения и возвращает значение типа *T, указывающее на него. Переменная инициализируется, нулевым значением для своего типа.

new(T)

Например

type S struct { a int; b float64 }
new(S)

выделяет память для переменной типа S, инициализирует ее (a=0, b=0.0) и возвращает значение типа *S, содержащее адрес расположения переменной в памяти.

Создание срезов (slice), карт (map) и каналов

Встроенная функция make принимает тип T, который должен быть типом среза, карты или канала, за которым может следовать список выражений, зависящий от типа. Возвращает значение типа T (не *T). Память инициализируется, как описано в посте о начальных значениях.

Вызов            Тип T      Результат

make(T, n)       slice      срез среза типа T с длиной n и емкостью n
make(T, n, m)    slice      срез среза типа T с длиной n и емкостью m

make(T)          map        карта типа T
make(T, n)       map        карта типа T с начальным пространством для приблизительно n элементов

make(T)          channel    небуферизованный каналом типа T
make(T, n)       channel    небуферизованным каналом типа T, размер буфера n

Каждый из аргументов размера n и m должен иметь целочисленный тип или нетипизированную константу. Аргумент постоянного размера должен быть неотрицательным и представимым значением типа int; если это нетипизированная константа, ей присваивается тип int. Если оба n и m заданы и являются постоянными, то n должно быть не больше m. Если n отрицательно или больше чем m во время выполнения, возникает паника во время выполнения.

s := make([]int, 10, 100)       // срез с len(s) == 10, cap(s) == 100
s := make([]int, 1e3)           // срез с len(s) == cap(s) == 1000
s := make([]int, 1<<63)         // недопустимо: len(s) не представимо значением типа int
s := make([]int, 10, 0)         // недопустимо: len(s) > cap(s)
c := make(chan int, 10)         // канал с размером буфера 10
m := make(map[string]int, 100)  // карта с начальным пространством приблизительно для 100 элементов

Вызов make с a с типом map и размером карты n создаст карту с начальным пространством для хранения n элементов карты. Точное поведение зависит от реализации.

Previousдлина и емкостьNextдобавление в срезы и копирование срезов

Last updated 4 years ago

Was this helpful?