在nodejs中,我使用__dirname。在戈朗,这相当于什么?
我在谷歌上找到了这篇文章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"))
但在戈朗,这是正确的方式还是惯用的方式?
如果你用这种方式:
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
当你使用一些IDE(如GoLand)运行程序时,你会得到/tmp路径,因为可执行文件将从/tmp保存和运行
我认为获取当前工作目录或'的最佳方法。’是:
import(
"os"
"fmt"
"log"
)
func main() {
dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
}
os.Getwd()函数将返回当前工作目录。
而且这一切都不需要使用任何外部库:D
如果你用这种方式:
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
当你使用一些IDE(如GoLand)运行程序时,你会得到/tmp路径,因为可执行文件将从/tmp保存和运行
我认为获取当前工作目录或'的最佳方法。’是:
import(
"os"
"fmt"
"log"
)
func main() {
dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
}
os.Getwd()函数将返回当前工作目录。
而且这一切都不需要使用任何外部库:D
操作系统。可执行文件:https://tip.golang.org/pkg/os/可执行文件
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)
}