2015-01-30 3 views
1

Я пакет, единственная роль которого заключается в предоставлении коллекции фиктивных данных, считанных из файлов.Настройка абсолютного пути к файлу в 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, чтобы исправить это?

Большое спасибо

ответ

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 среды установлен.

0

Запуск установить команду с идти инструмент, и вы должны быть в состоянии запустить команду из любой точки в вашей системе. Вот хорошая ссылка, в которой приведен пример команды : How To Write Go Code

Смежные вопросы