return переменных в цикле golang

Всем привет, есть одна проблемка, мне нужно чтобы функция возвращала переменную из цикла for, проблемы с видимостью, не знаю как исправить :( Вот код:


func Open(path string) (string, error) { 
    f, err := os.Open(path)
    if err != nil {
        return "", err
    }
    data := make([]byte, 64)
    for {
        n, err := f.Read(data) // вот эта переменная "n"
        if err == io.EOF {
            break
        }
    }
    return string(data[:n]), nil // пишет что "undefined: n", нужно возвратить "n" из цикла
}

Ответы (1 шт):

Автор решения: Kers

Просто добавьте в цикл сохранение в переменную за его пределами и в последствии верните эту переменную.
Пример можно решить:

package main 

import "fmt" 

func main() {
    var sl []string // Сюда запишем данные из цикла
    var users = [3]string{"data1", "data2", "data3"} // Произвольные данные
    for -, value := range users { 
        sl = append(sl, value) // Добавляем данные в срез
    }
    return sl // возвращаем срез
}

В вашем случае код будет примерно таким:

func Open(path string) (string, error) { 
    f, err := os.Open(path)
    if err != nil {
        return "", err
    }
    data := make([]byte, 64)
    var new_n []int
    for {
        n, err := f.Read(data) // вот эта переменная "n"
        new_n := n
        if err == io.EOF {
            break
        }
    }
    return string(data[:new_n]), nil // пишет что "undefined: n", нужно возвратить "n" из цикла
}
→ Ссылка