我很惊讶我可以用这种方式初始化一片指针:
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}}
在文档中我会在哪里找到它?
答案 0 :(得分:5)
来自the spec:
在数组,切片或地图类型T,元素或的复合文字中 本身是复合文字的地图键可能会忽略 相应的文字类型,如果它与元素或键类型相同 T.类似地,作为复合地址的元素或键 当元素或键类型为* T时,文字可能会忽略& T.
基本上,它已经知道每个元素都是*index
,因此它可以让您不必一次又一次地实际输入&index
。
如果切片类型与元素类型不同(可能是接口类型的切片),则必须指定每个元素的类型,如下所示:
indices := []interface{}{&index{0, 1}, &index{1, 3}}