Skip to content

nobuenhombre/learn-golang-generics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LEARN GENERICS IN GO LANG

Дженерики (Обобщения) — это способ, позволяющий использовать несколько типов данных в качестве одного.

Синтаксис дженериков

  1. Дженерик типы (ограничители типов - type constraint)

any - является псевдонимом для interface{}

comparable - является псевдонимом для любых типов данных, которые можно сравнивать с помощью == или !=.

~ - префикс для производных типов

type MyInt32 int32 // тип MyInt32 является производным от int32

1.1 Неявное ограничение типов

 ... [Name typeA | typeB | typeC] ...

1.2 Явное ограничение типов

type GenericType interface {
    typeA | typeB | typeC
}

... [Name GenericType] ...

1.3 Производные дженерик типы

type GenericMap[A GenericTypeA] map[int]A
type GenericMap[A GenericTypeA] map[string]A
type GenericMap[Key GenericTypeKey, Value GenericTypeValue] map[Key]Value
type GenericSlice[Item GenericTypeItem] []Item
  1. Дженерик Функции цель - передать в функцию дженерик типы
func Action[A GenericTypeA, B GenericTypeB, C GenericTypeC](a A, b B) C {
	
}

вызов без указания типа

c := Action(a, b)

вызов с явным указанием типа

c := Action[int, float64](a, b)
  1. Дженерик Структуры цель - передать в Методы структуры или саму структуру дженерик типы
type Config[A GenericTypeA, B GenericTypeB, C GenericTypeC] struct {
	ID int
	Name string
	СС С
}

func (c Config[A,B,C]) Action(a A, b B) C {
    ...
}
  1. Дженерик Интерфейсы цель - создать интерфейсы с методами использующими дженерик типы
type Active[A GenericTypeA, B GenericTypeB, C GenericTypeC] interface {
    Action(a A, b B) C
}

Сравниваю Generics и Reflection

Для обработки нескольких типов одного параметра также можно использовать interface{} и reflections. Но при этом требуется дополнительная обработка ошибок которые могут возникнуть. И обработка этих ошибок происходит в Runtime.

Generics позволяют избежать дополнительной обработки ошибок в Runtime. Ошибки будут выявлены компилятором еще при компиляции.

About

Learn Go Lang Generics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published