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
Lepaskan: 2024-12-24 22:06:20
asal
335 orang telah melayarinya

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
}
Salin selepas log masuk

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()
}
Salin selepas log masuk

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()
  }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan