> Пример использования рефлексии (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: TrendTech

Стек: Go

> Пример ответа

Рефлексия в Go позволяет программе анализировать и модифицировать собственную структуру во время выполнения. Основной пример - сериализация/десериализация данных, например, в JSON или собственный формат.

Допустим, у нас есть структура:

GO
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}

Без рефлексии мы бы писали отдельные функции для каждого типа. С рефлексией можно создать универсальный парсер:

GO
func parseStruct(data map[string]interface{}, target interface{}) error {
val := reflect.ValueOf(target).Elem()
typ := val.Type()
for i := 0; i < val.NumField(); i++ {
field := val.Field(i)
fieldType := typ.Field(i)
tag := fieldType.Tag.Get("json")
if tag == "" {
tag = fieldType.Name
}
if value, ok := data[tag]; ok {
if field.CanSet() {
field.Set(reflect.ValueOf(value))
}
}
}
return nil
}

Использование:

GO
user := &User{}
data := map[string]interface{}{"name": "Alice", "age": 30}
parseStruct(data, user) // user.Name = "Alice", user.Age = 30

Другой частый пример - вызов методов по имени строки, что полезно для плагинов или обработчиков событий. Рефлексия мощна, но требует осторожности: она медленнее прямого кода и может скрывать ошибки типов до выполнения.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью