Как получить имя функции в Go?
учитывая функцию, можно ли получить ее имя? Скажи:
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
Мне сказали, что во время выполнения.FuncForPC поможет, но я не смог понять, как его использовать.
2 ответов:
извините за ответ на мой собственный вопрос, но я нашел решение:
package main import ( "fmt" "reflect" "runtime" ) func foo() { } func GetFunctionName(i interface{}) string { return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() } func main() { // This will print "name: main.foo" fmt.Println("name:", GetFunctionName(foo)) }
Не совсем то, что вы хотите, потому что он регистрирует имя файла и номер строки, но вот как я это делаю в моей библиотеке Tideland Common Go (http://tideland-cgl.googlecode.com/) с помощью пакета" runtime":
// Debug prints a debug information to the log with file and line. func Debug(format string, a ...interface{}) { _, file, line, _ := runtime.Caller(1) info := fmt.Sprintf(format, a...) log.Printf("[cgl] debug %s:%d %v", file, line, info)
Comments