首頁 > 後端開發 > Golang > 如何從字串實例化 Go 中的新型別?

如何從字串實例化 Go 中的新型別?

Patricia Arquette
發布: 2024-12-31 20:19:11
原創
430 人瀏覽過

How Can I Instantiate a New Type in Go from a String?

實例新類型(Golang)

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板