2010-08-25 163 views
1

如果我有一個類型的名稱(即「container/vector」),是否有方法查找具有給定名稱的reflect.Type?我試圖編寫一個簡單的數據庫支持的工作隊列系統,如果沒有這個功能,這將非常困難。從名稱中獲取reflect.Type

回答

1

由於名稱解析是編譯器/鏈接器的一部分,而不是運行時,所以我無法看到這將如何以任何微不足道的方式(或根本不可能)。

但是,http://github.com/nsf/gocode可能會提供一些想法。雖然我很確定這是通過處理$ GOROOT中的.a文件來實現的,但我仍然不知道如何獲得reflect.Type。也許如果exp/eval軟件包更成熟?

當然,如果您知道所有可能遇到的類型,則可以隨時製作reflect.Type的地圖。但我假設你正在處理不可預知的輸入,或者你會想到這一點。

0

只有創建reflect.Type的方法是首先具有預期類型的​​具體值。您甚至不能從基本類型(T)創建複合類型,例如切片([]T)。

stringreflect.Type的唯一方法是自己輸入映射。

mapping := map[string]reflect.Type { 
    "string": reflect.Typeof(""), 
    "container/vector": reflect.Typeof(new(vector.Vector)), 
    /* ... */ 
}