在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"))
但在戈朗,这是正确的方式还是惯用的方式?
这里没有一个答案对我有用,至少在go版本go1.16.2 darwin/amd64上。这是唯一接近node中的__dirname功能的东西
这是金牌工程师daniel Maslov在jetbrains论坛上发布的
粘贴在下面以方便阅读:
这个技巧实际上很简单,就是获取当前正在执行的文件并添加..到项目根目录。
创建一个新的目录和文件,如testing_init。跟着下面的内容走:
package testing_init
import (
"os"
"path"
"runtime"
)
func init() {
_, filename, _, _ := runtime.Caller(0)
dir := path.Join(path.Dir(filename), "..")
err := os.Chdir(dir)
if err != nil {
panic(err)
}
}
之后,只需将包导入到任何测试文件中:
package main_test
import (
_ "project/testing_init"
)
现在您可以从项目根目录指定路径
编辑:从Go 1.8(2017年2月发布)开始,推荐使用os。可执行:
func可执行()(字符串,错误)
Executable返回启动当前进程的可执行文件的路径名。不能保证路径仍然指向正确的可执行文件。如果使用符号链接启动进程,则结果可能是符号链接或它所指向的路径,这取决于操作系统。如果需要稳定的结果,请输入path/filepath。EvalSymlinks可能会有所帮助。
要获得可执行文件的目录,可以使用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)
}
旧的回答:
你应该会使用操作系统。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)
}