douza6300 2018-06-12 22:23 采纳率: 0%
浏览 125
已采纳

在括号中初始化Go结构会做什么?

Normally, I will initialize a struct like:

item1 := Item{1, "Foo"}

However, I've recently seen code initializing with parens:

item2 := (Item{2, "Bar"})

reflect returns the same Item name.

What does initializing in parentheses do and when is it preferred?

Here's some Go code to try this out:

  • 写回答

1条回答 默认 最新

  • douping3891 2018-06-12 22:26
    关注

    It does nothing special, those 2 lines are identical.

    However, when you want to use that in an if statement for example, the parentheses will be required, else you get a compile time error:

    if i := Item{3, "a"}; i.Id == 3 {
    }
    

    Results in:

    expected boolean expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)

    This is because a parsing ambiguity arises: it's not obvious if the opening brace would be part of the composite literal or the body of the if statement.

    Using parentheses will make it unambiguous for the compiler, so this works:

    if i := (Item{3, "a"}); i.Id == 3 {
    }
    

    For details, see: Struct in for loop initializer

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?