如何检查 Go 语言中的空结构体和空指针?
题目描述
如何检查 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 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回复
1个回答
test
2024-07-06
在 Go 语言中,结构体不能为 nil,只有结构体指针可以为 nil。当你声明一个结构体变量时,它的字段会被初始化为零值。要检查结构体是否为空,你可以检查其所有字段是否为零值。对于结构体指针,你可以检查它是否为 nil。下面是如何检查空结构体和空指针的示例你可以参考一下:
import "fmt"
type Product struct {
name, category string
price float64
upc int64
}
func isProductEmpty(prd Product) bool {
return prd.name == "" && prd.category == "" && prd.price == 0 && prd.upc == 0
}
func main() {
var prd Product
var prdPtr *Product
fmt.Println("Value: ", prd.name, prd.category, prd.price)
fmt.Println("Pointer: ", prdPtr)
// 检查结构体是否为空
if isProductEmpty(prd) {
fmt.Println("The product struct is empty.")
} else {
fmt.Println("The product struct is not empty.")
}
// 检查结构体指针是否为空
if prdPtr == nil {
fmt.Println("The product pointer is nil.")
} else {
fmt.Println("The product pointer is not nil.")
}
}
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容