2

File構造体を見ると、 andインターフェイスと関数とまったく同じ and 関数がRead()あります。しかし、パッケージはパッケージ内のどこにもありません(インポートされていません)。これは、インターフェイスを使用するためにインポートする必要がまったくないということですか? 定義がインターフェイスと同じである限り、それがorインターフェイスの一部であることを暗示できますか?Write()io.Writerio.ReaderRead()Write()ioFileRead()io.Writerio.Reader

io: http://golang.org/pkg/io/

OS: http://golang.org/pkg/os/

4

2 に答える 2

11

インターフェースが package で使用されていないため、Packageは packageをosインポートしません。ioio.Readeros

正しいシグネチャを持つメソッドがあるため、型*Fileはたまたま実装されます。この実装関係は暗黙的であり、これを明示的にする必要はなく、可能でもありません(たとえば、Java の with のように)。io.ReaderReadimplements ISomeThing

あなたは尋ねました:「これは、インターフェイスを使用するためにインポートする必要がまったくないということですか?」正式な答えは次のとおりです。使用したい場合は、するio.Reader必要がありますimport "io"

しかし、インターフェイスの実装/満足は、このインターフェイスの使用ではありません。適切なメソッドを持つだけで、任意のタイプが任意のインターフェイス (Jet が発明されていない将来のものであっても) を実装します。

于 2013-07-09T22:58:24.317 に答える