2010-08-25 3 views
1

Если у меня есть имя типа (например, «контейнер/вектор»), есть ли способ поиска отражения. Тип, который имеет данное имя? Я пытаюсь написать простую базу данных с поддержкой базы данных, и это будет очень сложно без этой функции.Получение отражения. Тип от имени

ответ

1

Я не вижу, как это было бы возможно любым тривиальным способом (или вообще), поскольку разрешение имен является частью компилятора/компоновщика, а не среды выполнения.

Однако http://github.com/nsf/gocode может предложить некоторые идеи. Хотя я уверен, что работает, обрабатывая файлы .a в $ GOROOT, поэтому я до сих пор не вижу, как вы получите отражение. Тип. Может быть, если пакет exp/eval был более зрелым?

Конечно, если вы знаете все возможные типы, с которыми вы столкнетесь, вы всегда можете составить карту отражения. Тип. Но я предполагаю, что вы работаете с непредсказуемым вкладом, или вы бы подумали об этом.

0

Только способ создания reflect.Type имеет конкретное значение для предполагаемого типа. Вы даже не можете создавать композитные типы, такие как срез ([]T), из базового типа (T).

Единственный способ перейти от string к reflect.Type - это ввести картографию самостоятельно.

mapping := map[string]reflect.Type { 
    "string": reflect.Typeof(""), 
    "container/vector": reflect.Typeof(new(vector.Vector)), 
    /* ... */ 
} 
Смежные вопросы