我能够获取当前目录的完整路径,现在我想创建一个函数,该函数将读取或获取执行代码的文件名。我可以获取文件名,但是它返回编写代码的原始文件名:
func GetFileName() string {
_, fpath, _, ok := runtime.Caller(0)
if !ok {
err := errors.New("failed to get filename")
panic(err)
}
filename := filepath.Base(fpath)
// remove extension
filename = removeExtension(filename)
return filename + ".log"
}
我想要做的是获取执行代码的当前文件名,例如:
我创建了app.go
:
package my
function getCurrentFileName() string {
// some code here that will return the filename where this code is executed.
}
然后当我在不同位置调用getCurrentFileName()
不同文件时 hello.go
它会返回hello.go
。
我已经在这里停留了一段时间,正在寻找答案。
基本上,这就是您告诉/传递给的内容runtime.Caller()
:返回条目之前要跳过的堆栈条目数。
如果你通过0
在你的代码,这意味着返回堆栈项,其中runtime.Caller()
被称为(如果 你
叫runtime.Caller()
)。传递1
将跳过您的函数,并返回调用您的函数的函数:
pc, file, line, ok := runtime.Caller(1)
if ok {
fmt.Printf("Called from %s, line #%d, func: %v\n",
file, line, runtime.FuncForPC(pc).Name())
}
调用包含此功能的subplay.A()
示例(在我的示例中):
7 func main() {
8 // Comment line
9 subplay.A()
10 }
输出:
Called from /home/icza/gows/src/play/play.go, line #9, func: main.main
我们看到代码play.go
从包的函数main()
中打印出在第9行调用了我们的函数的代码main
。
问题内容: 例如,方法调用方法。在方法中,如何获取文件名(我不想传递给方法)… 问题答案: 您可以使用该模块来实现此目的:
问题内容: 是否可以获取有关Golang中调用方函数的信息?例如,如果我有 我怎样才能得到那个叫? 我可以使用其他语言(例如,在C#中,我只需要使用class属性) 问题答案: 扩展我的评论,这是一些返回当前func调用者的代码 有关更多示例:https : //play.golang.org/p/cv-SpkvexuM
问题内容: 我知道这不是应该做的事情,但是有没有办法使用斜线字符来分隔Linux中文件名中的目录? 问题答案: 答案是,除非文件系统有错误,否则您将无法这样做。原因如下: 有一个系统调用,用于重命名名为的文件: 当系统调用被调用时,它将对名称进行路径查找()。继续跟踪,我们可以看到: 此代码适用于任何文件系统。什么意思 这意味着,如果您尝试使用传统方式将带有实际字符的参数作为文件名传递,它将无法执
在Java中获得文件扩展名的可靠方法是什么? 我不是在讨论对执行/,因为它对复杂的扩展(如等)毫无用处。(这是所有的库(Commons IO、Guava等)似乎都在做的。我正在寻找一种更复杂/可靠的方法来返回真正的扩展。
问题内容: 我知道Java代码可以通过JNI调用C 代码。但是,是否可以通过JNI或其他方法再次从C 调用Java代码? 问题答案: 是的,您当然可以。这是一个例子: 这是java文件: 还有一些使用它的C ++:
问题内容: 恐怕答案是否定的,但是也许你们中的一个使我感到惊讶。 谢谢。 编辑1: 我知道这个问题没有多大意义,但我认为这是可以理解的,遗憾的是,答案是否定的。无论如何,我更改了问题的标题,在“反省”一词上加上了引号,以防万一,我将尽力更好地解释我的意图。 我有一个类型的实例,该实例是具有某些已知方法的某种抽象类型的子类。我想在运行时获取一个String,其中包含实例类型中此类方法之一的实际实现的