理解 Go 中的類型、值和反射
在 Go 中,反射提供了在運行時檢查和操作程式碼的機制。它提供兩種基本類型:reflect.Type 和reflect.Value,每種類型都提供與程式元素互動的不同功能。
考慮以下程式碼片段:
<code class="go">func show(i interface{}) { switch t := i.(type) { case *Person: t := reflect.TypeOf(i) // What does 't' contain? v := reflect.ValueOf(i) // What does 'v' contain? tag := t.Elem().Field(0).Tag name := v.Elem().Field(0).String() } }</code>
之間的區別反射中的類型和值
reflect.Type:
reflect.Value:
用法範例
在提供的程式碼片段中,switch 語句檢查 i 是否是「*Person」的實例。如果是這樣,reflect.TypeOf(i) 傳回 Person 結構的類型,允許存取其欄位標籤(例如 t.Elem().Field(0).Tag`)。
同時, Reflect.ValueOf(i) 傳回 Person 實例的 *reflect.Value。透過呼叫 v.Elem().Field(0).String(),您可以擷取其第一個欄位值的字串表示形式,而不管實例的特定類型。
以上是Go 反射中的「reflect.Type」和「reflect.Value」有何不同,它們在運行時提供了有關程式元素的哪些見解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!