双花括号在结构声明中意味着什么?

时间:2018-02-24 00:06:27

标签: go

有人可以解释一下这个代码中双花括号{{的含义是什么吗? :

func (t *testService) APIs() []rpc.API {
    return []rpc.API{{
        Namespace: "test",
        Version:   "1.0",
        Service: &TestAPI{
            state:     &t.state,
            peerCount: &t.peerCount,
        },
    }}
}

AFIK单花括号足以创建一个结构,所以为什么要加倍呢?

API结构的定义如下:

package rpc

// API describes the set of methods offered over the RPC interface
type API struct {
    Namespace string      // namespace under which the rpc methods of Service are exposed
    Version   string      // api version for DApp's
    Service   interface{} // receiver instance which holds the methods
    Public    bool        // indication if the methods must be considered safe for public use
}

2 个答案:

答案 0 :(得分:4)

这是一个稍短的版本(更少的行和更少的缩进):

return []rpc.API{
    {
        Namespace: "test",
        Version:   "1.0",
        Service: &TestAPI{
            state:     &t.state,
            peerCount: &t.peerCount,
        },
    },
}

它是一个包含一个元素的结构片段。

答案 1 :(得分:1)

[]rpc.API{ }定义了rpc.API的空切片。您可以在这些大括号中放置任意数量的rpc.API,以使它们成为切片的元素。

您拥有的代码与:

相同
a := rpc.API{ Namespace: "test", ... }
return []rpc.API{ a }