«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можете ли вы получить `reflect.Type` в Go без создания экземпляра типа или использования его имени в виде строки?

Можете ли вы получить `reflect.Type` в Go без создания экземпляра типа или использования его имени в виде строки?

Опубликовано 10 ноября 2024 г.
Просматривать:433

Can You Retrieve a `reflect.Type` in Go Without Instantiating the Type or Using its Name as a String?

Извлечение Reflect.Type из типа или его имени в Go

Этот вопрос исследует, возможно ли получить Reflect.Type a пользовательский тип, такой как «t1» в данном примере, без его создания или использования его имени в виде строки.

Что касается первой части вопроса, да, этого можно добиться, используя типизированный ноль. . Следующий фрагмент кода демонстрирует этот подход:

var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()

В этом примере мы используем типизированный nil для получения типа времени выполнения «t1».

Что касается второй части, получение отражения.Type непосредственно из имени типа не поддерживается в Go. Среда выполнения не поддерживает карту всех типов в текущем двоичном файле, что было бы необходимо для этого.

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

Хотя Go теоретически может предложить функцию для извлечения типа по его имени, маловероятно, что эта функция будет реализована в ближайшем будущем.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3