Fungsi Penapisan mengikut Parameter dan Jenis Pengembalian dalam Go
Pertimbangkan senario di mana anda mempunyai koleksi fungsi dan perlu memilih fungsi yang memenuhi kriteria tertentu, seperti mengembalikan integer atau mengambil integer sebagai parameter input. Tugasan ini boleh dicapai melalui penggunaan refleksi dalam Golang.
Pakej reflect menyediakan akses kepada metadata asas jenis dan nilai dalam Go. Dengan menggunakan reflect.ValueOf dan reflect.Type, kami boleh memeriksa jenis fungsi dan mendapatkan maklumat tentang parameternya dan mengembalikan nilai.
Untuk memilih fungsi yang mengembalikan integer, kami mengulangi setiap fungsi dalam senarai dan menggunakan reflect.ValueOf untuk mendapatkan nilainya. Kami kemudian mendapatkan semula jenis fungsi menggunakan reflect.Type dan periksa nilai pulangannya menggunakan NumOut dan Out. Jika jenis mana-mana nilai pulangan ialah "int", kami menandakan fungsi itu sebagai "baik" untuk dimasukkan.
Begitu juga, untuk memilih fungsi yang mengambil integer sebagai parameter, kami mengulangi melalui parameter NumIn fungsi dan semak jenis setiap input menggunakan reflect.In. Jika "int" ditemui antara jenis input, kami menandakan fungsi itu sebagai "baik."
Berikut ialah contoh program yang menunjukkan cara menggunakan pendekatan ini:
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) funcs[0] = func(a int) int { return a + 1 } funcs[1] = func(a string) int { return len(a) } funcs[2] = func(a string) string { return ":(" } for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if functype.In(i).String() == "int" { good = true break } } for i := 0; i < functype.NumOut(); i++ { if functype.Out(i).String() == "int" { good = true break } } if good { fmt.Println(f) } } } ```` </code>
Atas ialah kandungan terperinci Bagaimana Menapis Fungsi Go Berdasarkan Parameter dan Jenis Pengembalian Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!