Ответ
Нет, встроенный тип map
в Go не реализует ни одного стандартного интерфейса напрямую.
Почему так?
- Встроенный тип:
map
— это фундаментальная структура данных, встроенная в язык, а не обычный тип, определенный черезstruct
. Операции над ним (m[key]
,delete(m, key)
,len(m)
) — это ключевые слова и операторы языка, а не методы. - Метод-сеты: В Go тип удовлетворяет интерфейсу, если его набор методов (method set) включает все методы интерфейса. У
map
нет методов в этом смысле.
Однако поведение map
соответствует контракту интерфейсов, которые описывают хранилища ключ-значение. Вы можете создать свой собственный интерфейс, и map
можно будет использовать для его реализации через тип-обертку или просто передавать в функции, ожидающие совместимого поведения.
Пример пользовательского интерфейса:
type KeyValueStore[K comparable, V any] interface {
Get(key K) (V, bool)
Set(key K, value V)
Delete(key K)
}
Хотя сам map
нельзя присвоить переменной типа KeyValueStore
, его операции полностью соответствуют этому контракту:
m := make(map[string]int)
// Соответствует Set(key, value)
m["score"] = 100
// Соответствует Get(key)
v, ok := m["score"]
// Соответствует Delete(key)
delete(m, "score")
Вывод: map
не реализует интерфейсы формально, но его семантика позволяет легко использовать его в коде, который работает с абстракциями хранилищ ключ-значение.