Как показывает следующий код: n := localplugin.NewPluginNet()
, тип n
равен localnet.Net
, который является интерфейсом, реализованным указателем структуры *localnet.DomainSocket
.Функция func NewPluginNet() localnet.Net
возвращает нулевой указатель на n
.
var n localnet.Net
n = localplugin.NewPluginNet()
fmt.Println("----> ", n)
if n == nil {
fmt.Println("n is nil")
}else{
fmt.Println("n is not nil : ", n)
}
fmt.Println(reflect.TypeOf(n), reflect.TypeOf(nil), n)
Ниже приведен вывод приведенного выше кода.
----> <nil>
n is not nil : <nil>
*localnet.DomainSocket <nil> <nil>
Почему n не равно nil?
==========================================
var n1 *localnet.DomainSocket
n1 = nil
fmt.Println(">> ", n1)
if n1 == nil {
fmt.Println(">>n1 is nil")
}else{
fmt.Println(">>n1 is not nil : ", n)
}
fmt.Println(reflect.TypeOf(n1), reflect.TypeOf(nil), n1)
Однако,это правильно для этого случая:
>> <nil>
>>n1 is nil
*localnet.DomainSocket <nil> <nil>