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