go - 在 Golang 中设置绝对文件路径

标签 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 包的绝对路径来解决这个问题?

非常感谢

最佳答案

您应该检查 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 环境变量。

关于go - 在 Golang 中设置绝对文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242430/

相关文章:

c - 您如何构建Pion mediadevices webrtc示例?

json - Golang - 使用/遍历 JSON 解析映射

google-app-engine - GAE Golang Gorilla mux - 404 页面未找到

go - 是否有一个名为 "int32"的内置函数?

go - 将来自控制台的字符串输入片段转换为数字片段

http - 戈朗 : how to check if an HTTP request is in the TCP payload bytes

go - 如何避免重复 N 次类似的功能

go - 在 Go 中运行用户提交的代码

记录响应正文(反向代理)时的 Golang DumpResponse gzip 问题

http - 使用 net/http FileServer 服务文件导致 404