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

use*_*895 4 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])
}
Run Code Online (Sandbox Code Playgroud)

我期待着写一些更冗长的东西,比如:

indices := []*index{&index{0, 1}, &index{1, 3}}
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到文档中的内容?

cap*_*aig 5

规格:

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

基本上,它已经知道每个元素都是一个*index,所以它可以节省你不得不&index一次又一次地输入.

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

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