我有一些类似的数据结构,每个数据结构都有一些独特的字段。它们都实现了相同的行为接口 (DataPoint)。因此,它们的处理可以在交换每个结构的类型并通过接口中定义的方法对其进行操作的同时完成一次。我想让一个函数根据某些标准返回每种类型的空数据结构。但是,我似乎无法编译它,好像我的函数通过签名返回接口但实际上返回了一个实现,它抱怨。
这是我的意思的简化示例和操场示例:
https://play.golang.org/p/LxY55BC59D
package main
import "fmt"
type DataPoint interface {
Create()
}
type MetaData struct {
UniqueId string
AccountId int
UserId int
}
type Conversion struct {
Meta MetaData
Value int
}
func (c *Conversion) Create() {
fmt.Println("CREATE Conversion")
}
type Impression struct {
Meta MetaData
Count int
}
func (i *Impression) Create() {
fmt.Println("CREATE Impression")
}
func getDataPoint(t string) DataPoint {
if t == "Conversion" {
return &Conversion{}
} else {
return &Impression{}
}
}
func main() {
meta := MetaData{
UniqueId: "ID123445X",
AccountId: 1,
UserId: 2,
}
dpc := getDataPoint("Conversion")
dpc.Meta = meta
dpc.Value = 100
dpc.Create()
fmt.Println(dpc)
dpi := getDataPoint("Impression")
dpi.Meta = meta
dpi.Count = 42
dpi.Create()
fmt.Println(dpi)
}
编译产生:
prog.go:51: dpc.Meta undefined (type DataPoint has no field or method Meta)
prog.go:52: dpc.Value undefined (type DataPoint has no field or method Value)
prog.go:58: dpi.Meta undefined (type DataPoint has no field or method Meta)
prog.go:59: dpi.Count undefined (type DataPoint has no field or method Count)
湖上湖
万千封印
Qyouu
相关分类