ローカルファイルを開いて、を返したいの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あったかを詳しく説明していません。