在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中文網其他相關文章!