Bagaimana Menapis Fungsi Go Berdasarkan Parameter dan Jenis Pengembalian Menggunakan Refleksi?

Mary-Kate Olsen
Lepaskan: 2024-10-29 00:15:02
asal
205 orang telah melayarinya

How to Filter Go Functions Based on Parameters and Return Types Using Reflection?

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

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!

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!