dongwh1992 2017-10-12 10:21
浏览 383
已采纳

匿名结构,struct {} {}和{}之间的区别

I have string to struct map in golang defined in the following way:

var Foo = map[string]struct{}{
    "foo": struct{}{},
}

Gogland by default marks this declaration as warning, saying "Redundant type declaration".

var Foo = map[string]struct{}{
    "foo": {},
}

Above code solves the warning, but I couldn't find any information about the difference between struct{}{} and {} declaration. Is it kind of a "short notation"?

https://play.golang.org/p/0Akx98XtB4

  • 写回答

1条回答 默认 最新

  • dongqiao2077 2017-10-12 10:26
    关注

    This:

    struct{}{}
    

    is a composite literal which contains the type (struct{}) and the literal's value ({}).

    This:

    {}
    

    is also a composite literal without the type, just the value.

    Generally you have to specify / include the type in the composite literal to let the compiler know what kind of (what "type" of) composite literal you're creating, hence the syntax is:

    CompositeLit = LiteralType LiteralValue .

    But when you specify a map composite literal, the types of the key and value are known from the map type, and thus may be omitted if you intend to specify values of those types. This is mentioned in Spec: Composite literals:

    Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T. Similarly, elements or keys that are addresses of composite literals may elide the &T when the element or key type is *T.

    (Note: due to an oversight, this is only valid from Go 1.5.)

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

报告相同问题?

悬赏问题

  • ¥100 数字取证课程 关于FAT文件系统的操作
  • ¥15 如何使用js实现打印时每页设置统一的标题
  • ¥15 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致