|
|
|
|
|
by drvd
1912 days ago
|
|
> How can r not be nil, when it contains a nil value? In the same way a slice can contain one or more nil values without itself _being_ nil. A gift box containing nothing is not itself nothing. > And the reason is hopefully apparent from the previous two lines: It depends on the type of "nil".It depends on the type of "nil". Well, no. "r == nil" tests whether r itself is nil (i.e. the zero value of that interface type) which it is not. It contains b and is thus no longer nil. The type doesn't play a (large) role here. This misconception might be due to the fact that lots of types can be nil: slices, maps, channels, functions and (unfortunately) interfaces. Nobody is astonished that a slice containing any sort of nils is not nil itself; that a buffered channel containing nils is not nil itself and that the constant function `func()*int { return nil }` is not nil itself either. Only for interfaces this poses a problem. If interfaces wouldn't be "nil" but lets say "zilch" than it would be evident that r != zilch. |
|