if 语句中的结构初始化

我想检查一个结构是否为空,即它的所有字段是否都设置为其默认值。以下按预期工作:


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")

    }

}

有人可以解释为什么编译器不接受上述两个示例吗?当我们在做的时候:检查“空”结构的惯用方法是什么?最后一个例子有效,但对我来说看起来有点奇怪。


富国沪深
浏览 248回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go