Documentation
¶
Index ¶
- type Link
- type Linker
- func (linker *Linker[T, I]) Add(key T, value I)
- func (linker *Linker[T, I]) All() iter.Seq2[T, I]
- func (linker *Linker[T, I]) Get(key T) (I, error)
- func (linker *Linker[T, I]) GetOrDefault(key T, d I) I
- func (linker *Linker[T, I]) Has(key T) bool
- func (linker *Linker[T, I]) Keys() []T
- func (linker *Linker[T, I]) Len() int
- func (linker *Linker[T, I]) Remove(key T)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Link ¶
type Link[T comparable, I any] struct { Key T Value I }
func NewLink ¶
func NewLink[T comparable, I any](key T, value I) *Link[T, I]
type Linker ¶
type Linker[T comparable, I any] struct { // contains filtered or unexported fields }
Linker stores typed values (I) indexed by keys of type T. It combines a Mapper for case-insensitive string lookups with a direct key→value map, allowing access both by string name and by typed key.
This is useful for plugin systems, strategy patterns, or any scenario where you need to select implementations by name while maintaining type safety.
Example:
//go:generate stringer -type=Driver
type Driver uint8
const (
Postgres Driver = 0
MySQL Driver = 1
)
linker := NewLinker(
NewLink(Postgres, &PGDriver{}),
NewLink(MySQL, &MySQLDriver{}),
)
driver, _ := linker.GetByName("postgres") // returns &PGDriver{}
func (*Linker[T, I]) GetOrDefault ¶
func (linker *Linker[T, I]) GetOrDefault(key T, d I) I
Click to show internal directories.
Click to hide internal directories.