• 1.26 Go接口的nil判断


    1.26 Go接口的nil判断

    特点

    • nilGo语言中只能被赋值给指针和接口

    • 显示地将nil赋值给接口时,接口的typedata都将为nil。此时,接口与nil值判断是相等的。

    • 将一个带有类型的nil赋值给接口时,只有datanil,而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操作为对应的datatype并非为nil

    处理办法:

    修改方法的返回值。在方法内直接返回nil

    /*
    定义一个函数,返回该接口类型
    */
    func getStudents() Student {
       // 声明stu类型的指针变量--->带有类型的nil(类型为:*stu)
       var s *stu = nil
       if nil == s {
           return nil
      }
       return s
    }
  • 相关阅读:
    NO 3 ,人生苦短,我学python之python 元祖tuple魔法
    NO 2,人生苦短,我学python之python 列表list的魔法
    NO 1,人生苦短,我学python之python 字符串的魔法
    几种常见登录验证的方式总结
    Spring Boot 解决跨域问题的 3 种方案
    浅析VO、DTO、DO、PO的概念、区别和用处
    对于分库分表的入门理解
    在项目启动后执行某段功能代码
    jna编程学习
    RabbitMQ详解
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15944272.html
Copyright © 2020-2023  润新知