> Пример использования рефлексии (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: TrendTech
Стек: Go
> Пример ответа
Рефлексия в Go позволяет программе анализировать и модифицировать собственную структуру во время выполнения. Основной пример - сериализация/десериализация данных, например, в JSON или собственный формат.
Допустим, у нас есть структура:
GOtype User struct {Name string `json:"name"`Age int `json:"age"`}
Без рефлексии мы бы писали отдельные функции для каждого типа. С рефлексией можно создать универсальный парсер:
GOfunc 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}
Использование:
GOuser := &User{}data := map[string]interface{}{"name": "Alice", "age": 30}parseStruct(data, user) // user.Name = "Alice", user.Age = 30
Другой частый пример - вызов методов по имени строки, что полезно для плагинов или обработчиков событий. Рефлексия мощна, но требует осторожности: она медленнее прямого кода и может скрывать ошибки типов до выполнения.
> Похожие задачи по backend
Что такое анонимная функция
Для чего нужна рефлексия
Можно ли расхэшировать объект
Можно ли объявить поле так, чтобы оно было примитивом после компиляции
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью