Ответ 1
os.Open
возвращает io.Reader
http://play.golang.org/p/BskGT09kxL
package main
import (
"fmt"
"io"
"os"
)
var _ io.Reader = (*os.File)(nil)
func main() {
fmt.Println("Hello, playground")
}
Я хотел бы открыть локальный файл и вернуть io.Reader
. Причина в том, что мне нужно передать io.Reader
в библиотеку, которую я использую, например:
func read(r io.Reader) (results []string) {
}
os.Open
возвращает io.Reader
http://play.golang.org/p/BskGT09kxL
package main
import (
"fmt"
"io"
"os"
)
var _ io.Reader = (*os.File)(nil)
func main() {
fmt.Println("Hello, playground")
}
Используйте os.Open():
func Open (строка имени) (файл * Файл, ошибка ошибки)
Открыть открывает файл для чтения. В случае успеха методы возвращаемого файла могут быть используется для чтения; связанный файловый дескриптор имеет режим O_RDONLY. Если есть ошибка, он будет иметь тип * PathError.
Возвращаемое значение типа *os.File
реализует интерфейс io.Reader
.
Тип * os.File реализует интерфейс io.Reader, поэтому вы можете вернуть файл как Reader. Но я рекомендую вам использовать пакет bufio, если у вас есть намерения читать большие файлы, что-то вроде этого:
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
Вот пример, где мы открываем текстовый файл и создаем io.Reader из возвращенного экземпляра * os.File f
package main
import (
"io"
"os"
)
func main() {
f, err := os.Open("somefile.txt")
if err != nil {
panic(err)
}
defer f.Close()
var r io.Reader
r = f
}