使用反射檢索函數名稱
在 Go 中,反射提供了在運行時檢查和操作程序結構的機制。存取函數的名稱就是這樣的用例之一。但是,嘗試直接從其類型取得名稱可能會導致空字串。
預期行為
使用reflect.TypeOf(function)檢索函數的名稱。 Name() 傳回一個空字串,因為它指向類型本身,該類型不包含函數的name.
解決方案
要檢索函數的名稱,我們需使用runtime.FuncForPC。此函數取得指向函數反射值的指標並傳回指向 *Func 結構的指標。在此*Func 上呼叫Name 方法會產生預期的函數名稱:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
This方法傳回包和函數名稱,例如“包.功能”。如果需要,可以透過標記字串來提取包名稱。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3