Что такое рефлексия

«Что такое рефлексия» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Рефлексия в Go — это механизм для анализа и изменения структуры данных во время выполнения программы. Пакет reflect позволяет проверять типы, значения, поля структур и методы объектов динамически.

Основные возможности:

  • Проверка типа (reflect.TypeOf)
  • Чтение/изменение значений (reflect.ValueOf)
  • Обход полей структур, вызов методов
  • Создание новых объектов

Пример:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    x := 42
    t := reflect.TypeOf(x)  // int
    v := reflect.ValueOf(x) // 42

    fmt.Println(t, v) // int 42

    // Изменение значения (требуется указатель)
    p := reflect.ValueOf(&x)
    e := p.Elem()
    e.SetInt(24)
    fmt.Println(x) // 24
}

Важно:

  • Рефлексия медленнее статического кода
  • Нарушает безопасность типов
  • Сложна в отладке
  • Используется в сериализации, ORM, шаблонах

Лучше избегать рефлексии там, где можно обойтись интерфейсами или кодогенерацией.