2

Go の io パッケージのソース コードを読んでいるときに、よくわからないスニペットを見つけました。ここにあります

func WriteString(w Writer, s string) (n int, err error) {
    if sw, ok := w.(stringWriter); ok {
        return sw.WriteString(s)
    }
    return w.Write([]byte(s))
}

どこ

type stringWriter interface {
    WriteString(s string) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

型アサーションw.(stringWriter)は、w の動的型 (つまり Writer) が stringWriter インターフェースを実装することを表明します。stringWriter と Writer の型定義を考えると、これがどのように可能かわかりません。このコードが正しいと仮定すると、何が欠けているのでしょうか?

4

1 に答える 1