我想检查一个结构是否为空,即它的所有字段是否都设置为其默认值。以下按预期工作:
package main
import "fmt"
type MyStruct struct {
field1 string
field2 int
}
func main() {
var mine MyStruct
empty := MyStruct{}
// Check if mine is empty.
if mine == empty {
fmt.Print("mine is empty")
}
}
我想稍微缩短一下,所以我将空结构初始化移动到 if 语句中:
func main() {
var mine MyStruct
// Check if mine is empty.
if mine == MyStruct{} {
fmt.Print("mine is empty")
}
}
但这不起作用:syntax error: unexpected }, expecting := or = or comma. 尽管看起来与第一个示例几乎相同,但即使以下内容也不起作用:
func main() {
var mine MyStruct
// Check if mine is empty.
if empty := MyStruct{}; mine == empty {
fmt.Print("mine is empty")
}
}
编译器说:syntax error: need trailing comma before newline in composite literal。但是,我发现以下代码可以工作:
func main() {
var mine MyStruct
// Check if mine is empty.
if mine == *new(MyStruct) {
fmt.Print("mine is empty")
}
}
有人可以解释为什么编译器不接受上述两个示例吗?当我们在做的时候:检查“空”结构的惯用方法是什么?最后一个例子有效,但对我来说看起来有点奇怪。
相关分类