Go 言語では、io.Reader のパラメーター型を受け取る関数またはメソッドを定義すると、実際には io.Reader インターフェイスを実装する任意の型を受け入れることができます。したがって、bufio.NewScanner のパラメータとして os.File を使用する場合、それは os.File 型が io.Reader インターフェイスを実装しているためです。これは、io.Reader 型を受け入れる関数またはメソッドに os.File 型をパラメータとして渡すことができ、io.Reader メソッドを関数またはメソッド内で使用して os.File を操作できることを意味します。この柔軟性は Go 言語のインターフェイス特性を反映しており、コードがより簡潔で再利用可能になっています。したがって、パラメータの型が io.Reader として宣言されている場合でも、bufio.NewScanner に渡されるパラメータとして os.File を使用できます。
Go を学習し、bufio.newscanner
を使用してファイルの内容を読み続けてみてください。これを行うには次のコードを使用します:
定義を見てみると (少なくとも私にとっては) 何か奇妙に見えると思いましたが、上記の os.open("input.txt")
は実際には * os.file# を返します。 ## と
bufio.newscanner は
io を想定しています。パラメータとしてreaderを指定します。
reader はインターフェイスですが、
file は構造体であり、そのインターフェイスなどは (可能な場合は) 実装されません。
ただ興味があるのですが、他にどこでこの質問をすればいいのかわかりません。 Solution
os.file は、実際には io.reader インターフェイスを実装しています。
これは、io.reader インターフェイスによって提供されるすべてのメソッドを同じシグネチャで実装することを意味します。この特定のケースでは、この方法は次のとおりです:
リーリー
以上がGo では、定義では io.Reader のみを受け入れる必要があると定められているのに、なぜ bufio.NewScanner のパラメータとして *os.File を使用できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。