On Friday, October 14, 2016 at 1:33:52 AM UTC+8, di...@veryhaha.com wrote:
>
>
>
> 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.
>

but it compiles even if the underlying value doesn't implement io.Reader, 
not like the " s := y.(string) ", which doesn't compile.
 

>  
>
>>  
>>
>>>
>>> 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.

Reply via email to