首頁 > 後端開發 > Golang > 如何以字串形式檢索 Go 函數的簽章?

如何以字串形式檢索 Go 函數的簽章?

Patricia Arquette
發布: 2024-11-23 00:12:34
原創
997 人瀏覽過

How Can I Retrieve a Go Function's Signature as a String?

在Go 中以字串形式檢索函數的簽章

在Go 中,確定具有特定名稱和簽署的函數的簽名main包對於在出現差異時提供資訊性錯誤訊息至關重要。

可以Reflect.Type.String() 擷取簽名?

雖然reflect.Type.String() 提供類型的名稱(如main.ModuleInitFunc),但它無法提供完整的簽章。這在處理具有命名類型的函數值時尤其明顯。

建構簽名

要建構簽名,我們必須手動從reflect.Type收集資訊.

  • Type.In() 提供第ith 的型別參數。
  • Type.Out() 提供第 ith 個結果類型的型別。

範例實作

下面是一個產生函數簽章的範例函數value:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}
登入後複製

此函數透過迭代輸入和輸出類型並將它們組裝成人類可讀的字串來建構簽名。

測試簽名函數

測試簽名函數會產生以下結果results:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>
登入後複製

需要注意的是,Go 不提供對參數和結果類型名稱的訪問,因此它們在簽名中被省略。

以上是如何以字串形式檢索 Go 函數的簽章?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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