首頁 > 後端開發 > Golang > 如何使用反射根據參數和返回類型過濾 Go 函數?

如何使用反射根據參數和返回類型過濾 Go 函數?

Mary-Kate Olsen
發布: 2024-10-29 00:15:02
原創
378 人瀏覽過

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

在Go 中按參數和返回類型過濾函數

考慮一個場景,您有一個函數集合,需要有選擇地選擇那些滿足特定條件,例如傳回整數或將整數作為輸入參數。這個任務可以透過使用 Golang 中的反射來完成。

reflect 套件提供了對 Go 中類型和值的底層元資料的存取。透過利用reflect.ValueOf和reflect.Type,我們可以檢查函數類型並檢索有關其參數和返回值的資訊。

要選擇傳回整數的函數,我們迭代列表中的每個函數並使用Reflect.ValueOf 來取得它的值。然後,我們使用 Reflect.Type 檢索函數的類型,並使用 NumOut 和 Out 檢查其傳回值。如果任何傳回值的類型是“int”,我們將該函數標記為“好”以便包含。

類似地,要選擇採用整數作為參數的函數,我們會迭代該函數的 NumIn 參數並使用reflect.In 檢查每個輸入的類型。如果在輸入類型中找到“int”,我們將該函數標記為“good”。

這是一個示範如何使用此方法的範例程式:

<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>
登入後複製

以上是如何使用反射根據參數和返回類型過濾 Go 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板