【问题标题】:What does the double curly brace mean in []interface{}{}[]interface{}{} 中的双花括号是什么意思
【发布时间】:2019-07-22 16:01:45
【问题描述】:

请注意,这是这种格式的双花括号{}{},而不是嵌套的花括号 {{}}。我也不确定这是空接口问题、切片问题还是结构问题。我猜它至少是其中两个的组合。

我正在学习 Golang,但我已经达到了空接口。我看到我需要将一片空接口声明为

[]interface{}{}

例如

[]interface{}{"aa","bb"}

我不想盲目地开始使用它。虽然我了解空接口的概念,并且接口包含两部分数据,即值和类型,但我只是不了解 {}{} 结构?我了解到切片是使用 make() 或例如创建的 []int{}

使用空接口时额外的 {} 是什么?

谢谢

我已经用谷歌搜索了它,并浏览了我的教程。我还将它与我对结构的了解进行了比较,因为我怀疑接口是结构。我尝试谷歌 golang 接口主要产生普通接口,我没有问题。

【问题讨论】:

标签: go


【解决方案1】:

[]interface{} 是类型:空接口interface{} 的切片[](实际上是匿名内联类型声明)。第二组大括号实例化了该类型的一个实例,因此[]interface{}{} 是空接口的一个空切片,[]interface{}{"aa","bb"} 是具有两个项目的空接口切片。这也可能是[]string{"aa","bb"},一个包含两个项目的字符串切片,这与不同类型的相同(string 代替了interface{})。

您还可以有一个非空接口,例如 []interface{SomeFunc()}{}interface{SomeFunc()} 的一个空切片,这是一种非空匿名接口类型。或者你可以使用匿名结构类型,比如[]struct{Foo string}{{"bar"},{"baz"}}。这里还有更多的大括号——第一对围绕类型定义主体,第二对围绕切片文字,在其中,一对围绕两个结构文字。

【讨论】:

  • 我来寻找关于你最后一个例子的答案,即使它不在问题中。谢谢你的周到:)
【解决方案2】:

interface{}是空接口类型

[]interface{} 是一个空接口类型的切片

interface{}{} 是一个空的接口类型复合字面量

[]interface{}{} 是类型空接口复合字面量的切片


The Go Programming Language Specification

Interface types

Slice types

Composite literals


参加 Go Tour:A Tour of Go

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2017-10-09
    • 2011-09-09
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多