在源文件$ PWD / dir / src.go中,我使用
os.Open("myfile.txt")
它在$ PWD中寻找myfile.txt(看起来很正常)。
有没有办法告诉Go在src.go所在的目录中查找myfile.txt?我需要像Ruby中的__FILE__
这样的东西。
答案 0 :(得分:6)
Go不是解释性语言,因此在与源文件相同的位置查找文件没有任何意义。编译go二进制文件,并且不需要存在源文件来运行二进制文件。因为Go没有等同于 FILE 。 runtime.Caller函数在编译二进制文件时返回文件名。
我想也许如果我们理解你为什么真正想要这个功能,我们可以更好地为你提供建议。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用包osext
它提供函数ExecutableFolder()
,它返回当前正在运行的程序可执行文件所在的文件夹的绝对路径(对cron作业很有用)。它是跨平台的。
package main
import (
"github.com/kardianos/osext"
"fmt"
"log"
)
func main() {
folderPath, err := osext.ExecutableFolder()
if err != nil {
log.Fatal(err)
}
fmt.Println(folderPath)
}
您还可以获得完整的可执行文件路径(类似于__FILE__
):
package main
import (
"github.com/kardianos/osext"
"fmt"
)
func main() {
exeAbsolutePath, _ := osext.Executable()
fmt.Println(exeAbsolutePath)
}