gpt4 book ai didi

go - 从同一函数返回接口(interface)的不同专用实现

转载 作者:IT王子 更新时间:2023-10-29 00:35:20 27 4
gpt4 key购买 nike

我有一些数据结构,每个数据结构都有一些独特的字段。它们都实现相同的行为接口(interface) (DataPoint)。因此,它们的处理可以在交换每个结构的类型并通过接口(interface)中定义的方法对其进行操作时完成一次。我想让一个函数根据某些条件为每种类型返回空数据结构。但是,我似乎无法编译它,就好像我的函数通过签名返回接口(interface)但实际上返回一个实现,它提示道。

这是我的意思的一个简化示例和 playground 示例:

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)

最佳答案

如果没有 type assertion,您将无法访问这样的字段.您只能调用接口(interface)上的方法,它对其实现细节一无所知。如果您确实需要访问这些字段,请使用类型断言:

dpc := getDataPoint("Conversion")
dpc.(*Conversion).Meta = meta
dpc.(*Conversion).Value = 100
dpc.Create()

dpi := getDataPoint("Impression")
dpi.(*Impression).Meta = meta
dpi.(*Impression).Count = 42
dpi.Create()

Playground :https://play.golang.org/p/Ije8hfNcWS .

关于go - 从同一函数返回接口(interface)的不同专用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com