我怎么能初始化像这样的指针呢?

时间:2016-10-25 01:19:50

标签: go

我很惊讶我可以用这种方式初始化一片指针:

package main

import (
    "fmt"
)

type index struct {
    i, j int
}

func main() {
    indices := []*index{{0, 1}, {1, 3}} // Why does this work?

    fmt.Println(*indices[1])
}

我原本期待写一些更冗长的内容,如:

indices := []*index{&index{0, 1}, &index{1, 3}}

在文档中我会在哪里找到它?

1 个答案:

答案 0 :(得分:5)

来自the spec

  

在数组,切片或地图类型T,元素或的复合文字中   本身是复合文字的地图键可能会忽略   相应的文字类型,如果它与元素或键类型相同   T.类似地,作为复合地址的元素或键   当元素或键类型为* T时,文字可能会忽略& T.

基本上,它已经知道每个元素都是*index,因此它可以让您不必一次又一次地实际输入&index

如果切片类型与元素类型不同(可能是接口类型的切片),则必须指定每个元素的类型,如下所示:

indices := []interface{}{&index{0, 1}, &index{1, 3}}