Go supports nil values for certain classes of types, namely: pointers, functions, interfaces, maps, slices and channels. Nil values of these types indicate an absence of value, and vary in usability. Slices and channels are quite usable as nil values, maps less so. For pointers, interfaces and functions, besides indicating an absence, the nil value has little other usability and usually results in a panic if not checked beforehand.
And while the nil value has usability, sometimes a developer want one of the abovementioned type classes to always be non-nil. Unfortunately, Go currently does not provide an expression for such a use case.
The document explores two possible ways to provide such an expressibility, by investigating various languages that have either been designed from the ground up to support such constructs, or they have been added after the fact.
Some languages allow the developer to speficy whether a value is there or not by means of an Optional or similar object. Such an o