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

Метод sync.Map.Delete

Метод sync.Map.Delete удаляет элемент с указанным ключом из конкурентной карты. В качестве единственного параметра он принимает ключ, значение которого нужно удалить. Если элемент с таким ключом отсутствует в карте, метод ничего не делает и не вызывает ошибку. Этот метод является потокобезопасным и может вызываться одновременно из нескольких горутин.

Синтаксис

m.Delete(key)

Пример

Давайте создадим конкурентную карту, добавим в нее несколько элементов и удалим элемент с ключом "b":

package main import ( "fmt" "sync" ) func main() { var m sync.Map // Добавляем элементы m.Store("a", 1) m.Store("b", 2) m.Store("c", 3) // Удаляем элемент с ключом "b" m.Delete("b") // Проверяем, что элемент удален if val, ok := m.Load("b"); ok { fmt.Println("b:", val) } else { fmt.Println("b: not found") } // Проверяем остальные элементы if val, ok := m.Load("a"); ok { fmt.Println("a:", val) } if val, ok := m.Load("c"); ok { fmt.Println("c:", val) } }

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

"b: not found" "a: 1" "c: 3"

Пример

Метод Delete безопасно вызывать даже для ключа, которого нет в карте:

package main import ( "fmt" "sync" ) func main() { var m sync.Map // Добавляем элемент m.Store("key", 100) // Удаляем существующий ключ m.Delete("key") // Удаляем несуществующий ключ m.Delete("nonexistent") // Проверяем результат if val, ok := m.Load("key"); ok { fmt.Println("key:", val) } else { fmt.Println("key: not found") } }

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

"key: not found"

Пример

Метод Delete безопасно использовать при конкурентном доступе из нескольких горутин:

package main import ( "fmt" "sync" "time" ) func main() { var m sync.Map // Заполняем карту for i := 0; i < 100; i++ { m.Store(i, i*10) } // Запускаем несколько горутин для удаления элементов var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(start int) { defer wg.Done() for j := start; j < start+10; j++ { m.Delete(j) time.Sleep(time.Microsecond) } }(i * 10) } wg.Wait() // Проверяем количество оставшихся элементов count := 0 m.Range(func(key, value any) bool { count++ return true }) fmt.Println("Remaining elements:", count) }

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

"Remaining elements: 0"

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

  • метод sync.Map.LoadAndDelete,
    который загружает значение и удаляет элемент
  • метод sync.Map.Store,
    который добавляет или обновляет элемент в конкурентной карте
  • метод sync.Map.Load,
    который загружает значение по ключу
  • метод sync.Map.Range,
    который перебирает все элементы карты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить