我从 Node.js 来到 Go。__dirname
在 Go 中等效的 Node.js是:
_, filename, _, ok := runtime.Caller(0)
if !ok {
return nil, errors.New("unable to get the current filename")
}
dirname := filepath.Dir(file)
此线程中的其他一些提及以及它们错误的原因:
os.Executable()
将为您提供当前运行的可执行文件的文件路径。这相当于process.argv[0]
在 Node.js 中。如果您想获取__dirname
子包,则不是这样。
os.Getwd()
会给你当前的工作目录。这相当于process.cwd()
在 Node.js 中。当您从另一个目录运行程序时,这将是错误的。
最后,我建议不要为此用例引入第三方包。这是您可以使用的软件包:
package current
// Filename is the __filename equivalent
func Filename() (string, error) {
_, filename, _, ok := runtime.Caller(1)
if !ok {
return "", errors.New("unable to get the current filename")
}
return filename, nil
}
// Dirname is the __dirname equivalent
func Dirname() (string, error) {
filename, err := Filename()
if err != nil {
return "", err
}
return filepath.Dir(filename), nil
}
请注意,我已调整runtime.Caller(1)
为 1,因为我们要获取调用的包current.Dirname()
的目录,而不是包含该current
包的目录。