在 Go 中從型別名稱建立實例
在 Go 中,當只有型別名稱作為字串可用時,實例化物件並不簡單。這是因為 Go 是靜態類型的,並在連結期間刪除未使用的程式碼。
使用反射
儘管有限制,但可以使用反射來動態建立實例。過程如下:
- 填入全域 map[string]reflect.Type 將型別名稱與其反射等效項關聯起來。這可以在包初始化函數中完成。
- 要實例化一個對象,請在映射中尋找其reflect.Type。
- 使用reflect.New 取得指向新實例的指標。
- 使用interface{}類型和Elem().Interface()提取對象,這會取消引用指針並將其轉換為接口
代碼範例:
替代方法
除了反射之外,還可以考慮以下方法替代方案:
-
工廠方法:為每種類型定義一個工廠函數,以便更輕鬆地建立和物件建立。
-
建立函數映射: 維護一個map[string]func()介面{},其中鍵是型別名稱,值是傳回new的函數
注意:這些方法避免了反射的複雜性,並有可能改善編譯過程中的錯誤處理。
以上是如何僅使用類型名稱作為字串來建立 Go 實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!