我使用策略在代码中添加日志语句的位置。
EG。 fmt.Println("main.go:myFunction(): There was an error:", e)
我如何使用go generate来执行类似
的操作 fmt.Println("%fn%: There was an error:", e)
它将替换go文件的名称,封闭的函数名称和行号?
答案 0 :(得分:4)
1 package main
2
3 import (
4 "fmt"
5 "runtime"
6 )
7
8 func Trace () (file string, funcName string, line int, ok bool) {
9 pc, file, line, ok := runtime.Caller(1)
10 f := runtime.FuncForPC(pc)
11 return file, f.Name(), line, ok
12 }
13
14 func myFunc () {
15 fmt.Println(Trace())
16 }
17
18 func main() {
19 fmt.Println(Trace())
20 myFunc()
21 }
输出:
/prog.go main.main 19 true
/prog.go main.myFunc 15 true