Функция maps.Clone

Функция maps.Clone создает копию переданной карты. Она принимает один параметр - исходную карту, а возвращает новую карту с теми же ключами и значениями. Клонирование является поверхностным: значения копируются по ссылке, но сама структура карты создается заново.

Синтаксис

gomaps.Clone(map[M]K) map[M]K

Пример

Давайте создадим копию карты с целочисленными значениями:

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  original := map[string]int{"a": 1, "b": 2, "c": 3}
  clone := maps.Clone(original)

  fmt.Println(original)
  fmt.Println(clone)
}

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

gomap[a:1 b:2 c:3]
map[a:1 b:2 c:3]

Пример

Клонированная карта является независимой копией. Изменения в оригинальной карте не влияют на клон:

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  original := map[string]int{"a": 1, "b": 2, "c": 3}
  clone := maps.Clone(original)

  original["a"] = 100
  clone["b"] = 200

  fmt.Println(original)
  fmt.Println(clone)
}

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

gomap[a:100 b:2 c:3]
map[a:1 b:200 c:3]

Пример

Клонирование работает с любыми типами ключей и значений. Давайте скопируем карту со строковыми ключами и слайсами в качестве значений:

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  original := map[int][]string{
    1: {"a", "b"},
    2: {"c", "d"},
  }
  clone := maps.Clone(original)

  fmt.Println(original)
  fmt.Println(clone)
}

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

gomap[1:[a b] 2:[c d]]
map[1:[a b] 2:[c d]]

Пример

Функция maps.Clone корректно обрабатывает пустые и nil карты. Передача nil карты вернет также nil:

gopackage main

import (
  "fmt"
  "maps"
)

func main() {
  var empty map[string]int
  var nilMap map[string]int

  cloneEmpty := maps.Clone(empty)
  cloneNil := maps.Clone(nilMap)

  fmt.Println(cloneEmpty == nil)
  fmt.Println(cloneNil == nil)
}

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

gofalse
true

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

  • функцию maps.Copy,
    которая копирует все пары ключ-значение из одной карты в другую
  • функцию maps.Equal,
    которая сравнивает две карты на равенство
  • функцию maps.Keys,
    которая возвращает все ключи карты в виде слайса
  • функцию maps.Values,
    которая возвращает все значения карты в виде слайса