Go 作为指针语义的接收器语法

Go 作为指针语义的接收器语法,go,Go,有关以下数据: type Product struct { ID int `json:"id"` Name string `json:"name"` } var productList = []*Product{ &Product{ ID: 1, Name: "Latte", }, &am

有关以下数据:

type Product struct {
    ID          int     `json:"id"`
    Name        string  `json:"name"`
}

var productList = []*Product{
    &Product{
        ID:          1,
        Name:        "Latte",

    }, &Product{
        ID:          2,
        Name:        "Espresso",
    },
}
使用类型定义,如下所示的接收器语义语法可以正常工作:

package data

type Products []*Product

func (p *Products) ToJSON(w io.Writer) error {
    encoder := json.NewEncoder(w)
    return encoder.Encode(p)
}
但以下语法给出了errorinvalid receiver*[]*产品基本或未命名类型:

说明:其类型必须是已定义的类型T或指向已定义类型T的指针。T称为接收器基类型。接收器基类型不能是指针或接口类型

还说:产品是定义的类型,所以我的理解是,[]*产品也是定义的类型

[]*产品是否不是定义的类型?为什么接收器语法p*[]*产品不是有效语法?

[]*产品不是定义的类型。语言规范明确指定了基本定义的类型,并将其定义为以下类型:

type Name BaseType
因此,[]类型不是已定义的类型。如果:

type NewType []Type
那么NewType就是一个已定义的类型。

哦,是的。。[]*产品不是定义的类型。产品是定义的类型,[]*产品是该定义类型的基础类型,但其本身不是定义的类型。
type NewType []Type