私はまだ Go に慣れていないので、組み込みインターフェースのサブタイプを使用できないことに驚きました。ここに私が何を意味するかを説明するための小さな例があります:
func test(sl bufio.ReadWriter){
// cannot use sl(type bufio.ReadWriter) as type bufio.Reader in function argument
readStuff(sl)
[...]
writeStuff(sl) // same kind of error
}
func readStuff(sl bufio.Reader){
[...]
}
すべてのインターフェイスは同じメモリ レイアウトを持ち、ReadWriter はリーダーとライターであるため、このコードが機能することを期待していました。インターフェイスタイプを次のように変換しようとしました:
readStuff(sl.(buffio.Reader))
しかし、それも機能しません。だから私は2つの質問があります:
- うまくいかないのはなぜですか?
- その問題についての哲学は何ですか?