Nadal jestem całkiem nowym produktem Go i byłem zaskoczony, że nie mogę korzystać z podtypu wbudowanego interfejsu. Oto mały przykład, aby wyjaśnić, co mam na myśli:Wbudowany interfejs
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){
[...]
}
Jak każdego interfejsu mają ten sam układ pamięci i ReadWriter jest Reader i Writer, spodziewałem się ten kod do pracy. Próbowałem przekonwertować typ interfejsu z:
readStuff(sl.(buffio.Reader))
Ale to nie działa. Mam więc dwa pytania:
- Dlaczego to nie działa?
- Jaka jest filozofia dotycząca tego problemu?
Dzięki! Działa z readStuff (* sl.Reader). – user1612346
Mam drugie pytanie: co, jeśli cały mój parametr to plaster zamiast pojedynczego parametru. Czy istnieje jakiś elegancki sposób na przekonwertowanie plasterka ReadWriter na plaster Reader? – user1612346
Myślę, że najbardziej eleganckim rozwiązaniem jest utworzenie nowego plasterka i zapełnienie go za pomocą pętli for. – Daniel