首頁 > 後端開發 > Golang > 主體

Go 中的 struct 方法可以透過反射僅使用其字串名稱來呼叫嗎?

Susan Sarandon
發布: 2024-11-24 00:47:10
原創
471 人瀏覽過

Can You Invoke a Struct Method in Go Using Only Its String Name Through Reflection?

反射:透過字串存取結構

考慮一個場景,其中您有一個具有特定方法的結構:

type MyStruct struct {
}

func (a *MyStruct) AAction() {
    fmt.Println("Hello a")
}
登入後複製

要使用反射動態呼叫AAction方法,可以執行以下操作(有效method):

reflect.New(reflect.TypeOf(MyStruct{})).MethodByName("AAction").Call([]reflect.Value{})
登入後複製

但是,使用 MyStruct{} 作為表達式並不是您想要的方法。相反,您希望將結構名稱指定為字串。這種方法目前無法存取:

theStruct := "MyStruct"
theAction := "AAction"
reflect.New(reflect.TypeOf(theStruct)).MethodByName(theAction).Call([]reflect.Value{})
登入後複製

不幸的是,這種嘗試是有缺陷的,因為 Reflect.TypeOf(theStruct) 將產生字串類型。

根據您的研究,您遇到了類似的情況關於使用字串按名稱呼叫結構方法的問題。然而,建議的字串匹配方法並不是一個可行的解決方案。

答案:

儘管您有這樣的願望,但不可能調用僅使用表示結構名稱的字串的結構方法。這是正確的,因為反射需要相關類型的特定值才能進行操作。如果沒有值,就無法與結構或其方法互動。

要實現所需的功能,您需要維護一個自訂註冊表,將結構名稱對應到對應的類型。此註冊表允許您根據字串名稱檢索類型,然後像往常一樣使用反射。然而,這種方法需要額外的努力,並且可能不適合所有場景。

以上是Go 中的 struct 方法可以透過反射僅使用其字串名稱來呼叫嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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