在Go中与.go源文件相同的目录中打开一个文件

时间:2012-04-07 17:43:44

标签: go

在源文件$ PWD / dir / src.go中,我使用

os.Open("myfile.txt")

它在$ PWD中寻找myfile.txt(看起来很正常)。

有没有办法告诉Go在src.go所在的目录中查找myfile.txt?我需要像Ruby中的__FILE__这样的东西。

3 个答案:

答案 0 :(得分:6)

Go不是解释性语言,因此在与源文件相同的位置查找文件没有任何意义。编译go二进制文件,并且不需要存在源文件来运行二进制文件。因为Go没有等同于 FILE 。 runtime.Caller函数在编译二进制文件时返回文件名。

我想也许如果我们理解你为什么真正想要这个功能,我们可以更好地为你提供建议。

答案 1 :(得分:0)

可能的替代骨架:

func __FILE__() (fn string) {
        _, fn, _, _ = runtime.Caller(0)
        return 
}

详情here

答案 2 :(得分:0)

使用包osext

它提供函数ExecutableFolder(),它返回当前正在运行的程序可执行文件所在的文件夹的绝对路径(对cron作业很有用)。它是跨平台的。

Online documentation

package main

import (
    "github.com/kardianos/osext"
    "fmt"
    "log"
)

func main() {
    folderPath, err := osext.ExecutableFolder()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(folderPath)
}

您还可以获得完整的可执行文件路径(类似于__FILE__):

package main

import (
    "github.com/kardianos/osext"
    "fmt"
)

func main() {
    exeAbsolutePath, _ := osext.Executable()
    fmt.Println(exeAbsolutePath)
}