是否有任何类似于"_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行).
(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
}
注意:将1传递给Caller(),以便它返回调用file_line()的行号,而不是调用runtime.Caller()的行号.
fmt.Println(file_line())  // Prints this file and line number.