給定一個函數,是否有可能得到它的名字?你說:如何在Go中獲取函數的名稱?
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
有人告訴我,runtime.FuncForPC會有所幫助,但我不明白如何使用它。
雖然這似乎工作,但可能需要一些照顧:.Pointer()的文檔聲明「如果v的Kind是Func,返回的指針是底層代碼指針,但不一定足以唯一標識一個函數。只有保證結果是零,當且僅當v是一個nil func值。「 – jochen
@jochen「不是一個func」意味着它可能返回誤報(即不同函數的指針)? – themihai
@themihai我不知道,我引用的句子是https://golang.org/pkg/reflect/#Value.Pointer上的所有文檔。但引用似乎表明,可以爲不同的功能獲得相同的指針,不是嗎?如果是這種情況,'GetFunctionName'可能會爲不同的函數返回相同的名稱? – jochen