首頁 >後端開發 >Golang >Go Reflection可以直接從類型的名稱中取得類型的表示嗎?

Go Reflection可以直接從類型的名稱中取得類型的表示嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-24 17:39:15575瀏覽

Can Go Reflection Directly Obtain a Type's Representation from its Name?

透過反射直接從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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn