Memilih Fungsi mengikut Taip dalam Go
Pertimbangkan senario di mana anda mempunyai tatasusunan atau kepingan fungsi pelbagai jenis. Untuk memproses fungsi ini dengan cekap, anda mungkin mahu memilih hanya yang mengembalikan atau menerima jenis data tertentu, seperti integer. Ini boleh dicapai menggunakan pakej pantulan Go.
Pakej pantulan menyediakan cara untuk mengintrospeksi jenis nilai semasa masa jalan. Dengan memeriksa jenis input dan output fungsi, anda boleh menapis fungsi yang memenuhi kriteria anda.
Pertimbangkan contoh program berikut:
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) // I use interface{} to allow any kind of func funcs[0] = func(a int) int { return a + 1 } // good funcs[1] = func(a string) int { return len(a) } // good funcs[2] = func(a string) string { return ":(" } // bad for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if "int" == functype.In(i).String() { good = true // yes, there is an int among inputs break } } for i := 0; i < functype.NumOut(); i++ { if "int" == functype.Out(i).String() { good = true // yes, there is an int among outputs break } } if good { fmt.Println(f) } } }</code>
Dalam program ini, kami mencipta kepingan fungsi ([]antara muka{}) untuk menyimpan fungsi pelbagai jenis. Kami kemudiannya melelas melalui kepingan ini dan untuk setiap fungsi, kami menggunakan refleksi untuk mendapatkan jenisnya (reflect.ValueOf(fi).Type()). Dengan memeriksa jenis input dan output, kami boleh menentukan sama ada fungsi itu memenuhi kriteria kami. Dalam kes ini, kami menyemak fungsi yang menerima atau mengembalikan integer. Jika fungsi sedemikian ditemui, ia dicetak ke output.
Pakej pantulan menyediakan mekanisme yang berkuasa untuk introspeksi nilai Go, termasuk fungsi. Dengan memanfaatkan keupayaan ini, anda boleh menapis fungsi berdasarkan jenisnya pada masa jalan, membolehkan operasi kod yang cekap dan fleksibel.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan refleksi Go untuk memilih fungsi berdasarkan jenis input dan outputnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!