2017-07-10 4 views
-2

私はgolangを初めて使っています。ドキュメント、os.Open戻り(*File, error)タイプ、およびbufio.NewScanner(r)の引数rio.Readerタイプをしているによるとどのように*ファイルタイプはReaderタイプとして渡すことができますか?

file, err := os.Open("input.txt") 
if err != nil { 
    log.Fatal(err) 
} 
defer file.Close() 

scanner := bufio.NewScanner(file) 
... 

:私はこのようなgolangコードを見ました。上記のコード例で

*Fileの種類(File型へのポインタ)を有する可変file引数がio.Readerタイプを期待してbufio.NewScannerメソッドに渡すことができます。それはどうすれば可能ですか?

私はソースコードをチェックし、 Fileタイプ( https://golang.org/src/os/types.go?s=369:411#L6)、および io.Readerタイプ( https://golang.org/src/io/io.go?s=3303:3363#L67は)思わ無関係です。では、どのようにパラメータを渡すことが可能ですか?

答えて

2

io.Readerinterfaceであり、*os.Fileはインタフェースを実装しています。それは私が行くことを強く勧めているin the Go Tourと説明されている。

+0

[この行](https://golang.org/src/os/file.go?s=7374:7411#L97)(行97)のためですか?これは '* File'が' Read(b [] byte)(n int、err error) 'メソッドを実装したことを伝えていますか? – null

+0

はい、そのメソッドは 'io.Reader'の要件を満たしています。 – Adrian

+0

うん、それは面白い、Javaから来ている人として、私はGoのインターフェイス実装の構文設計が少し奇妙であることが分かった。私は彼らが型定義と同じ場所に置かれることを期待していました。 – null

関連する問題