ローカルファイルを開いて、を返したいの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")
}
nil
指すのに適切なタイプのポインタですos.File
。(この場合、あなたは本当にそれを介して何もすることはできません。)そして、var _ io.Reader = (*os.File)(nil)
割り当ては、コンパイラのチェック作る*os.File
あるio.Reader
(または他の割り当てが有効ではないでしょうが)。Playgroundに移動してに変更*os.File
する*os.Process
と、インターフェイスを満たさないものに対して生成されるエラーが表示されます。
func (f *File) Read(b []byte) (n int, err error)
ましたReader
。と同じです。
os.Open()を使用します:
func Open(name string)(file * File、err error)
Openは、指定されたファイルを読み取り用に開きます。成功した場合、返されたファイルのメソッドを使用して読み取ることができます。関連するファイル記述子のモードはO_RDONLYです。エラーがある場合は、* PathErrorタイプになります。
typeの戻り値は*os.File
、io.Reader
インターフェースを実装します。
タイプ* os.Fileはio.Readerインターフェースを実装しているため、ファイルをリーダーとして返すことができます。ただし、次のような大きなファイルを読み取る場合は、bufioパッケージを使用することをお勧めします。
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
bufio
大きなファイルをお勧めする理由を詳しく教えてください。
path/file.ext
。他の答えは何でos.File
あったかを詳しく説明していません。