Задать вопрос
@twintwin1003

Go reflection interface{}?

Изучая Go столкнулся с такой проблемой - не могу понять, как язык со статической типизацией поддерживает такие штуки, как рефлексия?
Именно на системном уровне.

Вот пример:
Нам прилетает неизвестный JSON. По идее мы должны создать структуру с полями, которые ожидаем в JSON, и только после этого распарсить.
НО
возможен вариант:
var f interface{}
err := json.Unmarshal(inputJSON, &f)

Магии, конечно, не бывает, но был бы благодарен, если кто-то объяснит.
Спасибо!
  • Вопрос задан
  • 1063 просмотра
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Java-разработчик: тариф PRO
    8 месяцев
    Далее
  • ProductStar × РБК
    Python и Django: бэкенд-разработка
    3 месяца
    Далее
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Go - язык с относительно слабой типизацией. С - слабая система типов. Haskell - строго типизирован полноценной системой Хиндли-Милнер. В С что угодно можно передать пойнтером и в этом смысле любой код можно писать generic но unsafe, reflection невозможен. В Haskell все типизируется на этапе компиляции. Typechecker Haskell - это полноценная Тьюринг Машина, любой код generic и safe при этом, поэтому reflection просто не нужен. Go - прагматичный компромисс, на этапе компиляции передаваемый тип может быть неизвестен но всегда известен на этапе выполнения. В Go, runtime всегда знает тип всех данных отсюда и за этим reflection.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы