2015-04-09 4 views
2

В Java это можно сделать с помощью Class.forName("com.my_pkg_name.MyClass"), который возвращает тип класса.Есть ли способ получить Тип по имени, используя отражение Go?

Похоже, что отражение отражения может найти только тип по значению, но не позволяет использовать имя типа. Эта возможность может быть очень полезна при внедрении интерпретатора языка сценариев, который перехватывает код Go.

+0

К сожалению, это невозможно. Пакет 'reflect' не предоставляет такую ​​функцию, как' TypeByName (строка имени) '. – icza

ответ

5

Нет, если вы явно не регистрируете тип, как это делает пакет gob. Что-то вроде

// NOTE Should be protected by a mutex. 
var types map[string]reflect.Type 

func Register(value interface{}) { 
    t := reflect.TypeOf(value) 
    name := t.PkgPath() + "." + t.Name() 
    types[name] = t 
} 

func TypeByName(name string) reflect.Type { 
    return types[name] 
} 
Смежные вопросы