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

时间:2016-01-18 07:05:50

标签: go aop

例如,我想打印出某些struct的每个函数的函数名。

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

1 个答案:

答案 0 :(得分:0)

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())
}
  

输出:

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

here 复制)