题目描述
如何检查 Go 语言中的空结构体和空指针?
题目来源及自己的思路
最近在检查产品是否为空,看一下如下代码:
package main
import "fmt"
type Product struct {
name, category string
price float64
upc int64
}
func main() {
var prd Product
var prdPtr *Product
fmt.Println("Value: ", prd.name, prd.category, prd.price)
fmt.Println("Pointer: ", prdPtr)
}
这样直接运行可以得到 Go 为我们生成的空类型,打印结果如下:
Value: 0
Pointer: <nil>
那么问题来了,如何用 Go 语言程序判断结构体是被初始化为空,还是传值过来为空呢?
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
在 Go 语言中,结构体不能为 nil,只有结构体指针可以为 nil。当你声明一个结构体变量时,它的字段会被初始化为零值。要检查结构体是否为空,你可以检查其所有字段是否为零值。对于结构体指针,你可以检查它是否为 nil。下面是如何检查空结构体和空指针的示例你可以参考一下: