Documentation
¶
Index ¶
- type Mapper
- func (mapper *Mapper[T]) Add(values ...T)
- func (mapper *Mapper[T]) All() iter.Seq2[string, T]
- func (mapper *Mapper[T]) Get(key string) (T, error)
- func (mapper *Mapper[T]) HasByKey(key string) bool
- func (mapper *Mapper[T]) HasByValue(value T) bool
- func (mapper *Mapper[T]) Keys() []string
- func (mapper *Mapper[T]) RemoveByKey(key string)
- func (mapper *Mapper[T]) RemoveByValue(value T)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Mapper ¶
Mapper представляет собой регистронезависимое отображение строковых ключей на значения типа T, который должен реализовывать интерфейс fmt.Stringer.
Mapper обеспечивает:
- Автоматическое приведение ключей к нижнему регистру
- Безопасное получение значений с возвратом ошибки
- Итерацию по всем элементам через All()
- Типобезопасность через дженерики
Поля структуры не экспортируются, используйте методы для работы с Mapper.
func NewMapper ¶
NewMapper создаёт новый Mapper с опциональным начальным набором значений. Все переданные значения добавляются в mapper с ключами, полученными через их метод String() (приведёнными к нижнему регистру).
Пример:
type Color string
func (c Color) String() string { return string(c) }
colors := NewMapper[Color](Color("red"), Color("green"), Color("blue"))
func (*Mapper[T]) Add ¶
func (mapper *Mapper[T]) Add(values ...T)
Add добавляет одно или несколько значений в Mapper. Для каждого значения ключом становится результат value.String(), приведённый к нижнему регистру. Если значение с таким ключом уже существует, оно будет перезаписано.
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color]()
mapper.Add(Color("red"), Color("blue"))
mapper.Add(Color("RED")) // перезапишет Color("red")
func (*Mapper[T]) All ¶
All возвращает итератор для обхода всех элементов Mapper. Реализует интерфейс iter.Seq2, позволяя использовать range в цикле. Возвращает пары (ключ, значение), где ключ приведён к нижнему регистру.
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"), Color("blue"))
for key, value := range mapper.All() {
fmt.Printf("%s: %s\n", key, value)
}
// Вывод (порядок может быть разным):
// red: red
// green: green
// blue: blue
Итерацию можно прервать досрочно:
for key, value := range mapper.All() {
if value == Color("green") {
break
}
}
func (*Mapper[T]) Get ¶
Get возвращает значение по строковому ключу. Поиск выполняется регистронезависимо: ключи "Key", "KEY", "key" считаются эквивалентными.
Возвращает:
- T — найденное значение
- error — ошибку DoesNotExistError, если ключ не найден
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"))
value, err := mapper.Get("RED")
if errors.Is(err, errors.DoesNotExistError) {
// ключ не найден
}
func (*Mapper[T]) HasByKey ¶
HasByKey проверяет наличие ключа в Mapper. Поиск выполняется регистронезависимо.
Пример:
type Status string
func (s Status) String() string { return string(s) }
mapper := NewMapper[Status](Status("active"), Status("inactive"))
if mapper.HasByKey("ACTIVE") {
// ключ существует
}
func (*Mapper[T]) HasByValue ¶
HasByValue проверяет наличие значения в Mapper по его строковому представлению. Метод регистронезависим — вызывает value.String() и приводит результат к нижнему регистру. Эквивалентен вызову HasByKey(value.String()).
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"))
if mapper.HasByValue(Color("RED")) {
// значение присутствует
}
func (*Mapper[T]) Keys ¶
Keys возвращает срез всех ключей, хранящихся в Mapper. Ключи возвращаются в нижнем регистре (нормализованная форма). Порядок ключей не гарантируется (зависит от итерации по map).
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"), Color("blue"))
for _, key := range mapper.Keys() {
fmt.Println(key) // "red", "green", "blue" в произвольном порядке
}
func (*Mapper[T]) RemoveByKey ¶
RemoveByKey удаляет значение из Mapper по строковому ключу. Поиск выполняется регистронезависимо. Если ключ не найден, метод ничего не делает.
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"), Color("blue"))
mapper.RemoveByKey("RED") // удалит Color("red")
mapper.RemoveByKey("green") // удалит Color("green")
func (*Mapper[T]) RemoveByValue ¶
func (mapper *Mapper[T]) RemoveByValue(value T)
RemoveByValue удаляет значение из Mapper по его строковому представлению. Вызывает value.String() для получения ключа. Если значение не найдено, метод ничего не делает (не вызывает панику).
Пример:
type Color string
func (c Color) String() string { return string(c) }
mapper := NewMapper[Color](Color("red"), Color("green"), Color("blue"))
mapper.RemoveByValue(Color("RED")) // удалит Color("red")