gpt4 book ai didi

interface - 复制接口(interface)隐藏的数据

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:53 25 4
gpt4 key购买 nike

我有一些 TCP 连接,它会为我返回一些数据。我还有一个表示此数据的结构。

type Item struct {
A int32
B int32
}

Item 支持Unpacker接口(interface)

func (item *Item) Unpack(data []int32) {
item.A = data[0]
item.B = data[1]
return
}

type Unpacker interface {
Unpack([]int32)
}

所以我从 Network 收到了一些数据,这些数据代表了一堆项目。现在我想将我的结构传递给函数,我想取回一段充满数据的结构:

func find(packet [][]int32, responseItem Unpacker) (items []Unpacker) {
items = make([]Unpacker, len(packet))
for i, data := range(packet) {
responseItem.Unpack(data)
items[i] = responseItem
}
return
}

当然,在这种情况下,我得到了一个包含许多相同项目(指向相同项目的指针)的 slice 。但我想得到不同的项目和

items[i] = *responseItem

在我的情况下不起作用。

这是 playground 的链接:http://play.golang.org/p/RP4ryxoG2I

我相信我不了解 Go 的工作原理(这是我第一次使用 Go)。值得注意的是:如果可能的话,我不想在这里使用反射。

最佳答案

你的解包器倒退了。您想要在循环中创建新的 Item,将其解包到项目中,然后分配到您的 slice 中。您可以通过让 find 接受一个返回 Unpacker 的函数来做到这一点。

请参阅以下内容:http://play.golang.org/p/rFoa1eoh4A

您的查找函数:

type UnpackerMaker func() (Unpacker)

func find(packet [][]int32, makeUnpacker UnpackerMaker) (items []Unpacker) {
items = make([]Unpacker, len(packet))
for i, data := range(packet) {
unpacker := makeUnpacker()
unpacker.Unpack(data)
items[i] = unpacker
}
return
}

关于interface - 复制接口(interface)隐藏的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115433/

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