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

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

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部