首頁 > 後端開發 > Golang > Go 中的reflect.Type 和reflect.Value 有什麼不同?

Go 中的reflect.Type 和reflect.Value 有什麼不同?

Susan Sarandon
發布: 2024-10-29 18:22:44
原創
799 人瀏覽過

 What's the Difference Between reflect.Type and reflect.Value in Go?

Go 中的反射類型和值

問題:

在下面的Go 代碼片段中:

<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>
登入後複製

反射中的型別和值有什麼差別?

答案:

在Go中,反射提供了兩個主要的構造:reflect.Type和reflect 。價值。這些類型可讓您在運行時內省和操作資料。

  • reflect.Type:表示值的類型訊息,例如其名稱、基礎類型和結構體欄位。它允許您查詢與具有相同類型的所有變數相關的資訊。
  • reflect.Value:表示單一值並允許您與其資料進行互動。您可以使用它來設定和檢索值、在類型之間進行轉換以及對基礎資料執行其他操作。

在提供的程式碼片段中:

  • t := Reflect.TypeOf(i) 傳回一個 Reflect.Type,表示傳遞給 show 函數的值的類型。
  • v := Reflect.ValueOf(i) 傳回一個Reflect.Value,表示傳遞的實際值

要存取有關類型和值的信息,可以使用以下方法:

  • t.Elem():傳回如果類型是指針,則為底層元素。
  • t.Field(0).Tag:傳回與該類型的第一個欄位關聯的標籤。
  • v.Elem():傳回如果值為指針,則為底層元素的reflect.Value。
  • v.Field(0).String() :將值的第一個欄位中的資料轉換為字串。

以上是Go 中的reflect.Type 和reflect.Value 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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