使用反射檢索結構體欄位的名稱
在 Go 中使用反射套件時,可以動態操作結構體和欄位。但是,當嘗試使用反射列印特定欄位的名稱時,會出現問題。
考慮以下程式碼片段:
type A struct { Foo string } func (a *A) PrintFoo() { fmt.Println("Foo value is " + a.Foo) } func main() { a := &A{Foo: "afoo"} val := reflect.Indirect(reflect.ValueOf(a)) fmt.Println(val.Field(0).Type().Name()) // Prints "string" }
在此範例中,目標是列印“Foo ”,但它列印的是“字串”。這是因為Field(0)方法傳回一個reflect.StructField值,其中包含有關欄位類型的信息,而不是其名稱。
要擷取欄位的名稱,您需要使用Type()和reflect.Type值上的Field()方法:
fmt.Println(val.Field(0).Type().Field(0).Name) // Prints "Foo"
reflect.Type值上的Field(0)方法傳回一個reflect.StructField,它表示第一個欄位結構。該reflect.StructField的Name欄位包含欄位的名稱。
以上是如何使用 Go 反射檢索結構體欄位的名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!