在Golang中设置绝对文件路径

时间:2015-01-30 18:32:28

标签: go

我是一个软件包,其唯一的作用是提供从文件中读取的虚拟数据集合。

看起来像这样:

func GetArrayOfSize(n int) []int {
f, _ := os.Open("./arrays.txt")
defer f.Close()

numbers := make([]int, 0)
scanner := bufio.NewScanner(f)

for scanner.Scan() {
    s, _ := strconv.Atoi(scanner.Text())
    numbers = append(numbers, s)
}

    return numbers[0:n]
}

当我在这个包中测试它时工作正常但是每当我从另一个包调用GetArrayOfSize时我都会遇到运行时错误:

panic: runtime error: slice bounds out of range [recovered]
    panic: runtime error: slice bounds out of range

我猜这个错误是由于相对路径:'./arrays.txt。如何获取dummy包的绝对路径来解决此问题?

非常感谢

2 个答案:

答案 0 :(得分:1)

你应该检查os.Open的错误返回并处理它。

您可以使用go/build包获取源代码目录的绝对路径:

p, err := build.Default.Import("github.com/user/repo/dummy", "", build.FindOnly)
if err != nil {
    // handle error
}
fname := filepath.Join(p.Dir, "arrays.txt")

此代码假定已设置GOPATH环境变量。

答案 1 :(得分:0)

使用 go 工具运行安装命令,您应该可以从系统的任何位置运行命令。这是一个很好的链接,提供了安装命令的示例:How To Write Go Code