在 Go 中,從字串建立類型的新實例並不是一項簡單的任務。 Go 的靜態類型和死代碼消除機制使得基於儲存為字串的類型名稱動態建立物件變得困難。
要解決此限制,一種方法是維護全域 map[string]reflect.Type。此映射可以填入定義可發現型別的套件的 init() 函數中。透過使用這個映射,您可以尋找所需類型的reflect.Type,並使用reflect.New來取得指向該類型的新物件的指標。
type MyStruct struct { // ... } func init() { register("MyStruct", reflect.TypeOf(MyStruct{})) }
註冊後,您可以建立一個使用反射的新實例:
newObject := reflect.New(registered["MyStruct"]).Elem().Interface() myStruct := newObject.(MyStruct)
但是,重要的是要考慮反射會帶來效能開銷並增加程式碼的複雜性。探索替代方法可能更合適,例如:
以上是如何從字串實例化 Go 中的新型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!