Интерфейсная переменная равна nil только когда и тип, и значение в ней не заданы (оба nil). Интерфейс хранит пару (тип, значение). Частая ловушка: var p *MyStruct = nil, var i interface{} = p - здесь i != nil, потому что тип в паре - *MyStruct, а не nil. Проверка i == nil даёт false. Чтобы интерфейс был nil, в него нужно присвоить "голый" nil: var i interface{} = nil.
var p *int = nil
var i any = p
fmt.Println(i == nil) // false