在 nodejs 中,我使用__dirname。Golang 中的 this 等价于什么?
我用谷歌搜索并找到了这篇文章。他使用以下代码的地方
_, filename, _, _ := runtime.Caller(1) f, err := os.Open(path.Join(path.Dir(filename), "data.csv"))
但在 Golang 中这是正确的方式还是惯用的方式?
这应该这样做:
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) }
编辑:从 Go 1.8(2017 年 2 月发布)开始,推荐的方法是os.Executable:
os.Executable
func Executable() (string, error) Executable 返回启动当前进程的可执行文件的路径名。不能保证路径仍然指向正确的可执行文件。如果使用符号链接启动进程,则取决于操作系统,结果可能是符号链接或其指向的路径。如果需要稳定的结果, path/filepath.EvalSymlinks 可能会有所帮助。
func Executable() (string, error)
Executable 返回启动当前进程的可执行文件的路径名。不能保证路径仍然指向正确的可执行文件。如果使用符号链接启动进程,则取决于操作系统,结果可能是符号链接或其指向的路径。如果需要稳定的结果, path/filepath.EvalSymlinks 可能会有所帮助。
要仅获取可执行文件的目录,您可以使用path/filepath.Dir.
path/filepath.Dir
示例:
package main import ( "fmt" "os" "path/filepath" ) func main() { ex, err := os.Executable() if err != nil { panic(err) } exPath := filepath.Dir(ex) fmt.Println(exPath) }
旧答案:
你应该可以使用 os.Getwd
os.Getwd
func Getwd() (pwd string, err error)
Getwd 返回与当前目录对应的根路径名。如果当前目录可以通过多个路径到达(由于符号链接),Getwd 可能会返回其中的任何一个。
例如:
package main import ( "fmt" "os" ) func main() { pwd, err := os.Getwd() if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println(pwd) }