在nodejs中,我使用__dirname。在Golang中与此相当的是什么?
我已经在谷歌上找到了这篇文章http://andrewbrookins.com/tech/golang-get-directory-of-the-current-file/。他在其中使用了以下代码
_, filename, _, _ := runtime.Caller(1)
f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
但是在Golang中这是正确的方式还是惯用的方式呢?
发布于 2013-08-31 00:44:13
这应该可以做到:
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
}
发布于 2013-08-31 21:02:37
使用package 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)
}
发布于 2018-12-04 20:09:39
os.Executable
:https://tip.golang.org/pkg/os/#Executable
filepath.EvalSymlinks
:https://golang.org/pkg/path/filepath/#EvalSymlinks
完整演示:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
var dirAbsPath string
ex, err := os.Executable()
if err == nil {
dirAbsPath = filepath.Dir(ex)
fmt.Println(dirAbsPath)
return
}
exReal, err := filepath.EvalSymlinks(ex)
if err != nil {
panic(err)
}
dirAbsPath = filepath.Dir(exReal)
fmt.Println(dirAbsPath)
}
https://stackoverflow.com/questions/18537257
复制相似问题