首頁 >後端開發 >Golang >Go 中如何根據參數和傳回類型從清單中選擇函數?

Go 中如何根據參數和傳回類型從清單中選擇函數?

DDD
DDD原創
2024-10-29 19:29:02933瀏覽

How to Select Functions from a List Based on Parameter and Return Types in Go?

從 Go 中的清單中選擇函數

在 Go 中,可以使用切片或陣列建立函數清單。但是,根據特定標準(例如傳回類型或參數類型)選擇函數需要使用反射。

要確定函數是否接受整數參數或傳回整數,我們可以使用 Reflect 套件來檢查它的型別簽章。以下是一個範例程式碼,示範如何實現此目的:

<code class="go">package main

import (
    "fmt"
    "reflect"
)

func main() {
    funcs := make([]interface{}, 3, 3) // Use interface{} for any function type
    funcs[0] = func(a int) int { return a + 1 } // Accepts an int, returns an int
    funcs[1] = func(a string) int { return len(a) } // Accepts a string, returns an int
    funcs[2] = func(a string) string { return ":(" } // Accepts a string, returns a string

    for _, fi := range funcs {
        f := reflect.ValueOf(fi)
        functype := f.Type()
        hasIntParam := false
        hasIntReturn := false

        // Check function parameters for int type
        for i := 0; i < functype.NumIn(); i++ {
            if "int" == functype.In(i).String() {
                hasIntParam = true
                break
            }
        }

        // Check function return value for int type
        for i := 0; i < functype.NumOut(); i++ {
            if "int" == functype.Out(i).String() {
                hasIntReturn = true
                break
            }
        }

        // Print the function if it has integer parameter or return type
        if hasIntParam || hasIntReturn {
            fmt.Println(f)
        }
    }
}</code>

透過使用反射,我們可以內省清單中的函數並選擇性地列印滿足指定條件的函數。程式碼是不言自明的,清楚地演示瞭如何在 Go 中處理這個問題。

以上是Go 中如何根據參數和傳回類型從清單中選擇函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn