mapper

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2026 License: MIT Imports: 5 Imported by: 2

README

mapper

import "github.com/Compogo/types/mapper"

Index

type Mapper

Mapper представляет собой регистронезависимое отображение строковых ключей на значения типа T, который должен реализовывать интерфейс fmt.Stringer.

Mapper обеспечивает:

  • Автоматическое приведение ключей к нижнему регистру
  • Безопасное получение значений с возвратом ошибки
  • Итерацию по всем элементам через All()
  • Типобезопасность через дженерики

Поля структуры не экспортируются, используйте методы для работы с Mapper.

type Mapper[T fmt.Stringer] struct {
    // contains filtered or unexported fields
}

func NewMapper
func NewMapper[T fmt.Stringer](values ...T) *Mapper[T]

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
func (mapper *Mapper[T]) All() iter.Seq2[string, T]

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
func (mapper *Mapper[T]) Get(key string) (T, error)

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
func (mapper *Mapper[T]) HasByKey(key string) bool

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
func (mapper *Mapper[T]) HasByValue(value T) bool

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
func (mapper *Mapper[T]) Keys() []string

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
func (mapper *Mapper[T]) RemoveByKey(key string)

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")

Generated by gomarkdoc

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Mapper

type Mapper[T fmt.Stringer] struct {
	// contains filtered or unexported fields
}

Mapper представляет собой регистронезависимое отображение строковых ключей на значения типа T, который должен реализовывать интерфейс fmt.Stringer.

Mapper обеспечивает:

  • Автоматическое приведение ключей к нижнему регистру
  • Безопасное получение значений с возвратом ошибки
  • Итерацию по всем элементам через All()
  • Типобезопасность через дженерики

Поля структуры не экспортируются, используйте методы для работы с Mapper.

func NewMapper

func NewMapper[T fmt.Stringer](values ...T) *Mapper[T]

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

func (mapper *Mapper[T]) All() iter.Seq2[string, T]

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

func (mapper *Mapper[T]) Get(key string) (T, error)

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

func (mapper *Mapper[T]) HasByKey(key string) bool

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

func (mapper *Mapper[T]) HasByValue(value T) bool

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

func (mapper *Mapper[T]) Keys() []string

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

func (mapper *Mapper[T]) RemoveByKey(key string)

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")

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL