4

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

os.Open("myfile.txt")

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

有没有办法告诉 Go 在与 src.go 相同的目录中查找 myfile.txt ?我需要类似__FILE__Ruby 的东西。

4

3 回答 3

8

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

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

于 2012-04-07T20:26:31.823 回答
0

一个可能的替代骨架:

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

详情在这里

于 2012-04-07T18:15:15.337 回答
0

使用包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)
}

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

package main

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

func main() {
    exeAbsolutePath, _ := osext.Executable()
    fmt.Println(exeAbsolutePath)
}
于 2013-12-03T11:18:04.377 回答