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!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具