1.26 Go接口的nil判断
特点
nil在Go语言中只能被赋值给指针和接口
显示地将nil赋值给接口时,接口的
type和data都将为nil。此时,接口与nil值判断是相等的。
将一个带有类型的
nil赋值给接口时,只有data为nil,而type不为nil,此时,接口与nil判断将不相等。
代码示例
package main
import "fmt"
/*
定义一个接口
 */
type Student interface {
    ShowInfor() string
}
/*
定义一个类型
 */
type stu struct {
    name string
    age int
}
/*
该类型实现ShowInfor函数
 */
func (s *stu) ShowInfor() string {
    return "Hi!"
}
/*
定义一个函数,返回该接口类型
 */
func getStudents() Student {
    // 声明stu类型的指针变量--->带有类型的nil(类型为:*stu)
    var s *stu = nil
    return s
}
func main() {
    fmt.Println("==========显式将nil赋值给接口==========")
    var ss Student
    ss = nil
    if nil == ss {
        fmt.Println("收到的信息是:nil")
    }else {
        fmt.Println("收到的信息是:not nil")
    }
    fmt.Println("==========带有类型的nil赋值给接口==========")
    // 调用getStudents方法
    if nil == getStudents() {
        fmt.Println("收到的信息是:nil")
    }else {
        fmt.Println("收到的信息是:not nil")
    }
}
输出结果:
getStudent()虽然执行:赋值nil操作,但是代码执行结果为:
fmt.Println("收到的信息是:not nil")
原因:
赋值nil操作为对应的data,type并非为nil
处理办法:
修改方法的返回值。在方法内直接返回nil
/*
定义一个函数,返回该接口类型
 */
func getStudents() Student {
    // 声明stu类型的指针变量--->带有类型的nil(类型为:*stu)
    var s *stu = nil
    if nil == s {
        return nil
    }
    return s
}
    It's a lonely road!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号