--- /dev/null
+package main
+
+import (
+ "fmt"
+ "reflect"
+)
+
+type Nil interface {
+ String() string
+}
+
+func MakeNil() Nil {
+ var n *NilStruct
+ return n
+}
+
+type NilStruct struct {
+ Data string
+}
+
+func (n *NilStruct) String() string {
+ return n.Data
+}
+
+func main() {
+ var n *NilStruct
+ fmt.Printf("%t %#v %s %t\n",
+ n == nil,
+ n,
+ reflect.ValueOf(n).Kind(),
+ reflect.ValueOf(n).IsNil())
+ n2 := MakeNil()
+ fmt.Printf("%t %#v %s %t\n",
+ n2 == nil, // want `this comparison is never true`
+ n2,
+ reflect.ValueOf(n2).Kind(),
+ reflect.ValueOf(n2).IsNil())
+ fmt.Println(n2.String())
+}