2016-12-05 38 views
4

如何獲得函數參數在Go運行時,我所知道的僅僅是如何獲得函數名稱:在運行時獲取函數參數圍棋

pc, file, line, ok := runtime.Caller(2) 
rt := runtime.FuncForPC(pc) 
return rt.Name() // Foo 

我需要的是這樣的:

Foo(1,2,3) 
// Foo_1_2_3 
+2

我已經過了幾個小時來閱讀文檔,並試圖找到一個回答你的問題。但是,哼哼,我能說的是我沒有發現任何與之相關的東西。如果您發現任何解決方案,請更新您的問題或回答。這將有所幫助。謝謝。 –

+0

你能發佈一個可運行的例子嗎? –

+1

@ nexus66 XD so ..我還沒有找到任何解決方案,我所做的是爲每個函數手動編寫名稱和參數..類似於: 'ram_key:=「FunctionName」+ I.ToS(arg1) +「_」+ I.ToS(arg2)+「_」+ I.ToS(arg3)'//根本不使用任何反射,所以它可能更快 – Kokizzu

回答

4

不是一個完整的答案,但也許這可以幫助:

package main 

import (
    "fmt" 
    "reflect" 
) 

func main() { 
    fmt.Println(reflect.TypeOf(f1)) 
    for index := 0; index < reflect.TypeOf(f1).NumIn(); index++ { 
     fmt.Println(reflect.TypeOf(f1).In(index)) 
    } 
} 

func f1(a int, b string) {} 

打印:

func(int, string) int string