Введение

В области программирования Go версия 1.21 представляет новый взгляд на пакет Maps. Являясь краеугольным камнем манипулирования данными, карты обеспечивают эффективное хранение и извлечение данных типа «ключ-значение». В этой статье мы рассмотрим расширенные функции пакета карт Go 1.21, которые позволят вам использовать его потенциал для упрощения кодирования и управления данными. Присоединяйтесь к нам в путешествии по царству ключевого значения с пакетом карт Go 1.21.

Мы обсудим пакет maps, который позволяет нам выполнять различные операции с картами в Go.

Первым шагом является импорт пакета карт (и мы также импортируем пакет fmt для отображения примеров).

import (
 "fmt"
 "maps"
)

Мы собираемся создать карту, которую будем использовать в остальной части поста.

myMap := map[string]int{
  "one":   1,
  "two":   2,
  "three": 3,
  "four":  4,
 }

и мы увидим эти методы далее:

  • Клон: мы можем клонировать карту
  • Равно: мы можем сравнить 2 карты
  • DeleteFunc: мы можем удалять элементы карты
  • Копировать: мы можем скопировать все элементы карты на другую карту.

В качестве уточнения, было 2 метода (Значения и Ключи), которые были удалены при выпуске стабильной версии 1.21. Эти методы были в бета-версии. (коммит здесь)

Клон

Мы можем клонировать карту, создав другую карту:

myOtherMap := maps.Clone(myMap)

fmt.Printf("First Map %v \nClone %v\n", myMap, myOtherMap)

Выход

First Map map[four:4 one:1 three:3 two:2] 
Clone map[four:4 one:1 three:3 two:2]

Равный

Мы можем сравнить 2 карты. Если обе карты равны, метод вернет true; в противном случае он вернет false.

resutl := maps.Equal(map1, map2)

Пример

r := maps.Equal(myMap, myOtherMap)

fmt.Printf("myMap:      %v \nmyOtherMap: %v\n", myMap, myOtherMap)
fmt.Printf("Compare %t\n", r )

myMap["one"] = 11
r = maps.Equal(myMap, myOtherMap)

fmt.Printf("\n\nmyMap:      %v \nmyOtherMap: %v\n", myMap, myOtherMap)
fmt.Printf("Compare %t\n", r )

Выход

myMap:      map[four:4 one:1 three:3 two:2] 
myOtherMap: map[four:4 one:1 three:3 two:2]
Compare true


myMap:      map[four:4 one:11 three:3 two:2] 
myOtherMap: map[four:4 one:1  three:3 two:2]
Compare false

УдалитьФункция

Мы можем удалить один или несколько элементов карты. В случае удаления мы можем использовать только функцию «Функция».

 maps.DeleteFunc(myMap, func(key string, value int) bool {
  ...
 })

Когда он возвращает true, пары ключ/значение будут удалены.

Пример

Мы удаляем все элементы, которые имеют значение «один».

fmt.Printf("Original Map: %v\n", myMap)

maps.DeleteFunc(myMap, func(k string, v int) bool {
 return k == "one"
})

fmt.Printf("with Deleted value %v\n", myMap)

Выход

Original Map: map[four:4 one:1 three:3 two:2]
with Deleted value map[four:4 three:3 two:2]

Копировать

мы можем записать все пары ключ/значение в src, добавив их в dst.

Когда ключ в src уже присутствует в dst, значение в dst будет перезаписано значением, связанным с ключом в src.

maps.Copy(dst, src)

Пример

 dst := map[string]int{
  "four":4, 
  "ten":10,
  "three":3,
  "two":2,
 }

 src := map[string]int {
  "four":44, 
  "nine":9,
  "one":1,
  "three":3,
  "two":2,
 }

 fmt.Printf("dst: %v \nsrc: %v\n", dst, src)

 maps.Copy(dst, src)
 
 fmt.Printf("\ncopied variable (dst): %v\n", dst)

Выход

dst: map[four:4 ten:10 three:3 two:2] 
src: map[four:44 nine:9 one:1 three:3 two:2]

copied variable (dst): map[four:44 nine:9 one:1 ten:10 three:3 two:2]

Заключение

Подводя итог, можно сказать, что пакет Go maps — это универсальный и эффективный инструмент для управления парами ключ-значение. Освоив этот пакет, мы приобретаем фундаментальные навыки для эффективного решения различных задач программирования. Давайте воспользуемся мощью карт, чтобы улучшить наши усилия по программированию на Go. Для получения дополнительной информации вы можете посетить официальный сайт Go здесь.

ресурс: blog_go_v21_maps

блог: beeblogit