2
Go 's io 패키지의 소스 코드를 읽었으며 완전히 이해하지 못하는 코드 조각을 발견했습니다.이 유형의 어설 션은 유효합니까?
type stringWriter interface {
WriteString(s string) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
타입 선언 w.(stringWriter)
는 w (즉 작가)의 동적 유형이 StringWriter를 인터페이스를 구현 주장 여기서 여기서는
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))
}
이다. stringWriter 및 Writer의 유형 정의가 주어지면 이것이 가능한 방법을 알 수 없습니다. 이 코드가 맞다고 가정하면, 내가 누락 된 부분은 무엇입니까?
그래서 분명히 거의 embarasing하고 있습니다. 키워드 앞에 너무 많은 시간이 걸리면'func WriteString (w Writer)'가 Writer 인터페이스를 구현하는 모든 것을 허용한다는 것을 잊어 버리게됩니다. 고맙습니다. –