Golang:如何在每个结构成员函数的开头运行相同的逻辑?

Golang:如何在每个结构成员函数的开头运行相同的逻辑?,go,aop,Go,Aop,例如,我想打印出某个结构的每个函数的函数名 此外,我在每个成员函数的开头使用fmt.Println,还有更好的方法吗 package main import "fmt" import "runtime" func main() { pc, _, _, _ := runtime.Caller(0) fmt.Println("Name of function: " + runtime.FuncForPC(pc).Name()) fmt.Println() //

例如,我想打印出某个结构的每个函数的函数名

此外,我在每个成员函数的开头使用
fmt.Println
,还有更好的方法吗

package main

import "fmt"
import "runtime"

func main() {
    pc, _, _, _ := runtime.Caller(0)
    fmt.Println("Name of function: " + runtime.FuncForPC(pc).Name())
    fmt.Println()

    // or, define a function for it
    fmt.Println("Name of function: " + funcName())
    x()
}

func funcName() string {
    pc, _, _, _ := runtime.Caller(1)
    return runtime.FuncForPC(pc).Name()
}

func x() {
    fmt.Println("Name of function: " + funcName())
    y()
}

func y() {
    fmt.Println("Name of function: " + funcName())
    z()
}
func z() {
    fmt.Println("Name of function: " + funcName())
}
输出:


(复制自)

它仍然需要在每个成员函数处写入
fmt.Println(“函数名:“+funcName())
。有没有更好的方法来编写一次并在每个成员函数的开头运行?对不起。我知道你想要什么,但我不知道怎么做。也许你实际上并不需要它。这将是一个巨大的cpu成本。如果你只是想调试,只需在每次需要的地方添加fmt。你不能这样做。(当然,您可以解析代码并插入这些打印语句,例如,就像封面工具那样。但这可能不是您希望听到的答案。)
Name of function: main.main

Name of function: main.main
Name of function: main.x
Name of function: main.y
Name of function: main.z