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

Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis Menggunakan `reflect.TypeOf()` dalam Go?

Susan Sarandon
Lepaskan: 2024-12-20 10:40:10
asal
231 orang telah melayarinya

How Can I Perform Type Assertion Using `reflect.TypeOf()` in Go?

Taip Penegasan Menggunakan Reflect.TypeOf() dalam Go

Apabila bekerja dengan antara muka dalam Go, kadangkala ia mungkin perlu untuk menentukan jenis nilai asas. Di sinilah pakej mencerminkan memainkan peranan. Fungsi reflect.TypeOf() boleh digunakan untuk mendapatkan jenis nilai antara muka. Walau bagaimanapun, penegasan jenis memerlukan jenis tertentu, bukan hanya objek Jenis.

Masalah

Dalam kod yang disediakan, percubaan dibuat untuk melaksanakan penegasan jenis pada hasil reflect.TypeOf( i):

item2 := i.(reflect.TypeOf(i)) // reflect.TypeOf(i) is not a type
Salin selepas log masuk

Baris ini akan gagal kerana reflect.TypeOf(i) mengembalikan objek Type, bukan jenis tertentu yang boleh digunakan untuk penegasan jenis.

Penyelesaian

Terdapat beberapa cara untuk mendekati senario ini. Satu pilihan ialah menggunakan suis jenis pada nilai antara muka itu sendiri, seperti yang dicadangkan dalam jawapan:

switch x.(type){
  case int: 
    dosomething()
}
Salin selepas log masuk

Pendekatan ini menyemak jenis nilai yang disimpan dalam antara muka dan melakukan tindakan sewajarnya. Ia tidak memerlukan refleksi jenis.

Sebagai alternatif, jika anda secara khusus perlu mengakses dan menghidupkan jenis atribut dalam antara muka, anda boleh menggunakan pendekatan berikut:

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 melibatkan mengulangi medan antara muka, mendapatkan nilainya dan melakukan semakan jenis pada nilai tersebut.

Walaupun pendekatan ini tidak begitu ringkas kerana menggunakan suis jenis pada nilai antara muka itu sendiri, ia membolehkan lebih fleksibiliti dalam mengendalikan pelbagai jenis atribut dalam antara muka.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis Menggunakan `reflect.TypeOf()` dalam 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