在 Golang 中设置绝对文件路径
Setting up absolute file path in Golang
我是一个包,它的唯一作用是提供从文件中读取的虚拟数据集合。
看起来像这样:
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
包的绝对路径来解决这个问题?
非常感谢
运行 install 命令与 go 工具,你应该能够 运行 你的命令从您系统上的任何地方。这是一个很好的 link,给出了 install 命令的示例:How To Write Go Code
您应该检查 os.Open 中的错误 return 并进行处理。
您可以使用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 环境变量。
我是一个包,它的唯一作用是提供从文件中读取的虚拟数据集合。
看起来像这样:
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
包的绝对路径来解决这个问题?
非常感谢
运行 install 命令与 go 工具,你应该能够 运行 你的命令从您系统上的任何地方。这是一个很好的 link,给出了 install 命令的示例:How To Write Go Code
您应该检查 os.Open 中的错误 return 并进行处理。
您可以使用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 环境变量。