On Friday, October 14, 2016 at 1:28:01 AM UTC+8, di...@veryhaha.com wrote: > > > > On Thursday, October 13, 2016 at 11:22:14 PM UTC+8, Chris Manghane wrote: >> >> In that example y is a nil interface value of type l. The last line >> implies that for a type assertion to another interface type, the operation >> will only be possible if the underlying value implements both interfaces. >> That is, the value must have an m() method as well as all of io.reader >> methods or the type assertion will like the above assertion to a string >> type. >> > > But it looks it is not essential for the underlying value implements > io.Reader. > The code always compiles, whether or not the underlying value implements > io.Reader. > The difference is: > * if the underlying value implements io.Reader, then r is a non-nil > io.Reader value > * if the underlying value doesn't implement io.Reader, then r is a nil > io.Reader value >
sorry, my mistake, if the underlying value doesn't implement io.Reader, the last line will panic. > > >> >> On Oct 13, 2016 7:48 AM, <di...@veryhaha.com> wrote: >> >> >> >> On Thursday, October 13, 2016 at 8:52:14 PM UTC+8, Jan Mercl wrote: >> >>> On Thu, Oct 13, 2016 at 2:42 PM <di...@veryhaha.com> wrote: >>> >>> > I don't understand the comment of the last line. Can someone explain >>> it for me? >>> >>> "r has type io.Reader" means that the type if expr.(T) is T. >>> >>> "and y must implement both I and io.Reader" >>> >>> y is either nil or it implements I, because that's how it was declared >>> and nothing not implementing I can be assigned to it. The dynamic type of y >>> can implement any number of interfaces, so it can implement both I and >>> io.Reader. The later is checked at run time when the type assertion >>> expression y.(io.Reader) is actually evaluated. >>> >>> -- >>> >>> -j >>> >> >> So "y must implement both I and io.Reader" means short form of "the >> dynamic type of y must implement both I and io.Reader"? >> My brain really can't accept this short form. >> >> And in that example, it gives people the impression y is nil. I really >> think it is a bad example. >> >> >> >> >> >> >> I feel that comment (and that example) is very not professional for these >> reason: >> 1. y is a value of type I, >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.