Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis pada Keputusan `reflect.TypeOf()` Go?

Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis pada Keputusan `reflect.TypeOf()` Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 22:06:20340semak imbas

How Can I Perform Type Assertion on a Go `reflect.TypeOf()` Result?

Taip Penegasan Menggunakan reflect.TypeOf() dalam Go

In Go, apabila bekerja dengan antara muka, mungkin perlu melakukan penegasan jenis untuk mendapatkan jenis konkrit asas. Timbul persoalan mengenai cara menghantar Jenis (dikembalikan oleh reflect.TypeOf()) kepada jenis tertentu untuk penegasan.

Masalah:

Pertimbangkan kod contoh:

func IdentifyItemType(name string) interface{} {
    var item interface{}
    switch name {
    default:
        item = Article{}
    }
    return item
}

Di sini, kami bertujuan untuk mengenal pasti struct (Artikel) berdasarkan nama rentetan. Walau bagaimanapun, penegasan jenis memerlukan jenis, tetapi mencerminkan.TypeOf() mengembalikan Jenis.

Penyelesaian:

Jika matlamatnya adalah untuk menghidupkan jenis bahagian luar antara muka{}, pantulan tidak diperlukan:

switch x.(type){
  case int: 
    dosomething()
}

Walau bagaimanapun, untuk menghidupkan jenis atribut dalam antara muka, pantulan boleh digunakan:

s := reflect.ValueOf(x)
for i:=0; i<s.NumValues; i++{
  switch s.Field(i).Interface().(type){
    case int: 
      dosomething()
  }
}

Ini membenarkan penukaran jenis pada atribut antara muka. Walaupun bukan penyelesaian yang elegan, ia menyediakan fungsi sehingga alternatif yang lebih baik ditemui.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis pada Keputusan `reflect.TypeOf()` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn