sync.Map.CompareAndDelete
Метод sync.Map.CompareAndDelete выполняет атомарное удаление элемента
из конкурентной карты, но только при условии, что текущее значение
ключа совпадает с переданным ожидаемым значением. В первый параметр
мы передаем ключ, который нужно удалить. Во второй параметр мы передаем
ожидаемое значение, которое должно быть у элемента для его удаления.
Метод возвращает true, если удаление произошло успешно
(значение существовало и совпало с ожидаемым), и false
в противном случае.
Синтаксис
m.CompareAndDelete(key, old)
Пример
Давайте создадим конкурентную карту, добавим в нее элемент и попробуем удалить его при совпадении значения:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
m.Store("age", 25)
deleted := m.CompareAndDelete("age", 25)
fmt.Println(deleted)
val, ok := m.Load("age")
fmt.Println(val, ok)
}
Результат выполнения кода:
true
<nil> false
Пример
Попробуем удалить элемент с несовпадающим значением:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
m.Store("age", 25)
deleted := m.CompareAndDelete("age", 30)
fmt.Println(deleted)
val, ok := m.Load("age")
fmt.Println(val, ok)
}
Результат выполнения кода:
false
25 true
Пример
Попробуем удалить несуществующий ключ:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
m.Store("name", "John")
deleted := m.CompareAndDelete("age", 25)
fmt.Println(deleted)
val, ok := m.Load("name")
fmt.Println(val, ok)
}
Результат выполнения кода:
false
John true
Смотрите также
-
метод
sync.Map.CompareAndSwap,
который атомарно заменяет значение по ключу -
метод
sync.Map.LoadAndDelete,
который удаляет элемент и возвращает его предыдущее значение -
метод
sync.Map.Delete,
который удаляет элемент по ключу без проверки значения -
метод
sync.Map.Swap,
который атомарно обменивает значение по ключу