Giter VIP home page Giter VIP logo

learn-golang-generics's Introduction

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. Ошибки будут выявлены компилятором еще при компиляции.

learn-golang-generics's People

Stargazers

Aleksandr Sukharev avatar

Watchers

Ivan Sukharev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.