РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
51 of 1593 menu

Функция make

Функция make предназначена для создания и инициализации срезов (slice), карт (map) и каналов (chan). В отличие от new, которая выделяет память и возвращает указатель на нулевое значение, make не только выделяет память, но и инициализирует внутреннюю структуру данных, возвращая сам объект, готовый к использованию. Первым аргументом функция принимает тип данных, вторым - размер или емкость в зависимости от типа.

Синтаксис

make(T, len, cap)

Где T - тип данных (срез, карта или канал), len - длина (для срезов и каналов), cap - емкость (только для срезов, необязательный параметр).

Создание среза

Функция make создает срез с указанной длиной и емкостью. Давайте создадим срез целых чисел длиной 3 и емкостью 5:

package main import "fmt" func main() { slice := make([]int, 3, 5) fmt.Printf("len=%d cap=%d %v\n", len(slice), cap(slice), slice) }

Результат выполнения кода:

"len=3 cap=5 [0 0 0]"

Создание среза с элементами

При создании среза с помощью make элементы инициализируются нулевыми значениями. Давайте присвоим значения элементам среза:

package main import "fmt" func main() { slice := make([]string, 3) slice[0] = "a" slice[1] = "b" slice[2] = "c" fmt.Println(slice) }

Результат выполнения кода:

[a b c]

Создание карты

Функция make создает инициализированную карту, готовую к добавлению пар ключ-значение. Вторым аргументом можно указать подсказку по размеру для оптимизации:

package main import "fmt" func main() { m := make(map[string]int, 5) m["one"] = 1 m["two"] = 2 m["three"] = 3 fmt.Println(m) }

Результат выполнения кода:

"map[one:1 three:3 two:2]"

Создание канала

Функция make создает буферизированный канал с указанной емкостью. Каналы используются для взаимодействия между горутинами:

package main import "fmt" func main() { ch := make(chan int, 2) ch <- 10 ch <- 20 fmt.Println(<-ch) fmt.Println(<-ch) }

Результат выполнения кода:

10 20

Пример с разными типами

Давайте создадим все три типа данных с помощью make и выведем их значения:

package main import "fmt" func main() { s := make([]int, 2, 4) m := make(map[string]bool) c := make(chan string, 1) s[0] = 1 s[1] = 2 m["ok"] = true c <- "hello" fmt.Println(s) fmt.Println(m) fmt.Println(<-c) }

Результат выполнения кода:

[1 2] "map[ok:true]" "hello"

Смотрите также

  • функцию new,
    которая выделяет память и возвращает указатель
  • тип slice,
    который представляет динамический массив
  • тип map,
    который представляет коллекцию пар ключ-значение
  • тип chan,
    который используется для взаимодействия между горутинами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить