Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk menyemak jenis tersuai menggunakan refleksi di Golang?

Bagaimana untuk menyemak jenis tersuai menggunakan refleksi di Golang?

WBOY
Lepaskan: 2024-06-01 10:35:56
asal
478 orang telah melayarinya

Gunakan refleksi untuk memeriksa jenis tersuai dalam Go: import pakej "reflect". Gunakan reflect.ValueOf() untuk mendapatkan nilai sesuatu jenis. Gunakan reflect.TypeOf() untuk mendapatkan reflect.Type jenis. Gunakan NumField() dan Field() untuk mendapatkan medan. Gunakan NumMethod() dan Method() untuk mendapatkan kaedah awam. Gunakan FieldByName() untuk mendapatkan nilai medan. Gunakan Call() untuk memanggil kaedah awam. . Menggunakan refleksi, anda boleh memeriksa nilai, kaedah dan medan jenis tersuai, malah mencipta dan mengubah suai jenis itu sendiri.

如何在 Golang 中使用反射来检查自定义类型?Asas Refleksi

Langkah pertama untuk menggunakan refleksi ialah merujuk pakej reflect:

import "reflect"
Salin selepas log masuk

Nilai jenis boleh diperolehi melalui reflect.ValueOf()</ kod> fungsi: <p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>v := reflect.ValueOf(yourValue)</pre><div class="contentsignin">Salin selepas log masuk</div></div></p><kod>reflect.Type jenis mewakili jenis Go. Anda boleh menggunakan fungsi reflect.TypeOf() untuk mendapatkan reflect.Type jenis:

typ := reflect.TypeOf(YourType{})
Salin selepas log masuk
Semak jenis tersuai

reflect 包:

for i := 0; i < typ.NumField(); i++ {
  fmt.Println(typ.Field(i).Name)
}
Salin selepas log masuk

类型的值可以通过 reflect.ValueOf() 函数获取:

for i := 0; i < typ.NumMethod(); i++ {
  fmt.Println(typ.Method(i).Name)
}
Salin selepas log masuk

reflect.Type 类型表示一个 Go 类型。你可以使用 reflect.TypeOf() 函数获取一个类型的 reflect.Type

value := v.FieldByName("FieldName").Interface()
Salin selepas log masuk

检查自定义类型

获取字段

使用 NumField()Field() 方法可以获取类型的字段:

result := v.MethodByName("MethodName").Call([]reflect.Value{reflect.ValueOf(arg1), reflect.ValueOf(arg2)})
Salin selepas log masuk

获取方法

使用 NumMethod()Method() 方法可以获取类型的公共方法:

type MyType struct {
  Name string
  Age  int
}

myType := MyType{
  Name: "John Doe",
  Age:  30,
}

// 检查类型元信息
fmt.Println("Type:", reflect.TypeOf(myType))

// 检查名称字段
fmt.Println("Name Field:", reflect.ValueOf(myType).FieldByName("Name").String())

// 调用 ToString 方法
result := reflect.ValueOf(myType).MethodByName("ToString").Call([]reflect.Value{})
fmt.Println("ToString Result:", string(result[0].Bytes()))
Salin selepas log masuk

检查类型值

获取字段值

使用 FieldByName() 方法可以获取类型的字段值:

rrreee

调用方法

使用 Call()

Dapatkan medan

Gunakan kaedah NumField() dan Field() boleh mendapatkan medan jenis:

rrreee

Dapatkan kaedah

🎜Gunakan NumMethod() dan <code kaedah>Method() boleh mendapatkan kaedah awam jenis: 🎜rrreee🎜🎜Semak nilai jenis🎜🎜🎜🎜Dapatkan nilai medan🎜🎜🎜Gunakan FieldByName () kaedah untuk mendapatkan medan jenis Nilai: 🎜rrreee🎜🎜Kaedah panggilan🎜🎜🎜Gunakan kaedah Panggil() untuk memanggil kaedah awam jenis: 🎜rrreee🎜 🎜Kes praktikal🎜🎜🎜Berikut ialah cara mudah untuk menggunakan refleksi untuk menyemak jenis tersuai Contoh: 🎜rrreee🎜Contoh ini menunjukkan cara untuk mendapatkan maklumat meta jenis, mengakses nilai medan dan kaedah panggilan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menyemak jenis tersuai menggunakan refleksi di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan