golang中的_file_或_line_类似

sat*_*yam 10 c go

是否有任何类似于"_file_""_line_"在go中的函数,以了解谁在运行时调用特定函数?在C中,我们有"_file_"可以称为宏的行.怎么做去?

Kit*_*une 15

如果您正在使用该log软件包,则可以指示记录器为条目添加各种信息前缀.你可能最感兴趣的是Lshortfile常量,它会产生前缀d.go:23.或者,Llongfile可以打印文件的完整路径(例如/a/b/c/d.go:23).

如果您不想使用该log包,您也可以使用runtime.Caller(),这是日志包在内部使用的内容.它不像C宏那样直接,但您可以将其隐藏在函数后面(并指定正确的调用深度).您可以看到如何为示例实现日志包(第140行).

  • 要明确:`log.SetFlags(log.Lshortfile)`然后`log.Println("Error!")`将打印"myfile.go:8:错误!" (3认同)

Koa*_*la3 9

(1)编写一个调用runtime.Caller()的简短函数

(2)在运行时调用该函数,以便访问源代码文件和行号.

例:

import "runtime"

func file_line() string {
    _, fileName, fileLine, ok := runtime.Caller(1)
    var s string
    if ok {
        s = fmt.Sprintf("%s:%d", fileName, fileLine)
    } else {
        s = ""
    }
    return s
}
Run Code Online (Sandbox Code Playgroud)

注意:将1传递给Caller(),以便它返回调用file_line()的行号,而不是调用runtime.Caller()的行号.

fmt.Println(file_line())  // Prints this file and line number.
Run Code Online (Sandbox Code Playgroud)