Personally, in a classroom context, I'd avoid the term "untyped nil" (or "typed nil", for that matter) for interface values - specifically *because* I find it confusing. That is, I would point out that it is sometimes used that way (so people don't get confused if they hear it), but insist on the parlance from the spec:
- An interface value can be nil, in which case it has no dynamic type/value
- An interface value can be non-nil, in which case its dynamic value might or might not be nil (depending on whether the dynamic type allows it)
That is, instead of calling something a typed or untyped nil (neither of which is parlance defined by the language - "untyped nil" is an error message from the compiler, that might be more appropriately worded as "can't infer type of nil-identifier"), you talk about whether an interface value has a dynamic value and whether or not that dynamic value is nil.
I will never be able to remember what an untyped nil is supposed to be (that is, which of the cases it to denotes) and I will never understand why someone came up with that, if there is already an authoritatively and unambiguously defined term :)
PS: I know that Roger already mentioned that it's technically incorrect, I just wanted to make explicit what I think *is* correct and what I think ought to be taught instead. :)