Reflection (рефлексия)

preview_player
Показать описание
Рефлексия или отображение - это один из видов метапрограммирования позволяющий нам в рантайме (ходе выполнения программы) определять типы данных переменных, поля структур и другую информацию, домтупную на этапе программирования, но не доступную, без рефлексии в рантайме. Рефлексия поможет Вам не дублировать Ваш код.

Удачи Вам в изучении программирования в целом и языка Го в частности, я постараюсь Вам в этом помочь )).

На этом канале будут околокомпьютерные видео, видео по обзорам железа софта и создания собственного софта.

Таймкоды:
00:00 - теория
00:41 - несколько функций решающих одну проблему
02:33 - описание рефлексии
04:12 - простой пример
05:28 - рефлексия для структур
06:34 - практика структурной рефлексии
08:56 - пример полезных функций с рефлексией

Примеры кода:

func isEmpty(val interface{}) bool {
return reflect.ValueOf(val).IsZero()
}

func setValue(structure interface{}, key string, value interface{}) {
if reflect.TypeOf(structure).Elem().Kind() == reflect.Struct {
elem := reflect.ValueOf(structure).Elem()
field := elem.FieldByName(key)
if field.CanSet() {
field.Set(reflect.ValueOf(value))
}
}
}

func getValue(structure interface{}, key string) interface{} {
var result interface{}
if reflect.TypeOf(structure).Elem().Kind() == reflect.Struct {
elem := reflect.ValueOf(structure).Elem()
field := elem.FieldByName(key)
if field.IsValid() {
result = field.Interface()
}
}

return result
}

func concat(a interface{}, b interface{}) interface{} {
if reflect.TypeOf(a).Kind() == reflect.Int && reflect.TypeOf(b).Kind() == reflect.Int {
return reflect.ValueOf(a).Int() + reflect.ValueOf(b).Int()
}

if reflect.TypeOf(a).Kind() == reflect.String && reflect.TypeOf(b).Kind() == reflect.String {
return reflect.ValueOf(a).String() + reflect.ValueOf(b).String()
}

return nil
}

Рекомендации по теме
Комментарии
Автор

Все стало понятно, спасибо!
Удачи в развитии канала!

СеменНовиков-чн
Автор

Ааа, понял. Ситуацию поправили хахаха

Pahomushkin_Ivan