透過反射直接從Go 中的Name 取得類型表示
問題是是否可以使用Go 的反射庫來派生Type僅從其名稱來表示類型。這個問題背後的動機在於一個庫,用戶必須在其中提供類型表示以用於程式碼生成目的。
在運行時
這種直接轉換在運行時使用類型名稱的字串表示形式。編譯期間未明確引用的類型可能不會出現在可執行二進位檔案中,從而使它們在執行時間「未知」。請參閱「拆分客戶端/伺服器程式碼」以獲得深入的解釋。解決方法可以在「在Golang中呼叫所有具有特殊前綴或後綴的函數」中找到。
編碼期間
但是,在原始程式碼編寫或產生期間,有可能無需建立給定類型的變數並調用reflect.TypeOf()即可實現此目的。透過從指向類型的指標開始並利用類型化的 nil 指標值,可以使用 Type.Elem() 從指標的類型描述符導航到基本類型的描述符。
這裡是一個範例:
t := reflect.TypeOf((*YourType)(nil)).Elem()
此類型描述子由變數t 表示,將等效於透過建立YourType 類型的變數x 並應用而衍生的t2 描述符Reflect. TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
輸出:
main.YourType main.YourType true
(在Go Playground 上嘗試)
以上是Go Reflection可以直接從類型的名稱中取得類型的表示嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!