go generate替换语句位置

时间:2014-12-24 09:40:15

标签: go

我使用策略在代码中添加日志语句的位置。

EG。 fmt.Println("main.go:myFunction(): There was an error:", e)

我如何使用go generate来执行类似

的操作

fmt.Println("%fn%: There was an error:", e)

它将替换go文件的名称,封闭的函数名称和行号?

1 个答案:

答案 0 :(得分:4)

套餐runtimeCaller()可以提供帮助

  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