Bagaimanakah saya boleh menggunakan refleksi Go untuk memilih fungsi berdasarkan jenis input dan outputnya?

Linda Hamilton
Lepaskan: 2024-10-29 03:36:30
asal
711 orang telah melayarinya

How can I use Go reflection to select functions based on their input and output types?

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!