gpt4 book ai didi

go - 遍历 []interfaces{} 并获取每种类型的 channel 字段

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

我会先在脑海中尽可能清楚地说明这一点。

我有一个接口(interface)和几个类型,它们通过声明一个方法来继承它。非常好的和聪明的继承方式。

然后我有一个“ super ”类型 Thing,所有其他类型都嵌入了它。

Thing 结构有一个 Size int 和一个 Out chan 属性

我想了解的是为什么我可以从两个子结构中获取大小 .GetSize() 的值,但我在 channel 字段上却没有同样的成功 .GetChannel()(*ndr,我用它来在 goroutine 和它们的调用者之间进行通信)

...这里我得到 t.GetChannel 未定义(类型 Measurable 没有字段或方法 GetChannel)

它可能有助于演示逻辑:

package main

import (
"fmt"
)

type Measurable interface {
GetSize() int
}

type Thing struct {
Size int
Out chan int
}
type Something struct{ *Thing }
type Otherthing struct{ *Thing }

func newThing(size int) *Thing {
return &Thing{
Size: size,
Out: make(chan int),
}
}
func NewSomething(size int) *Something { return &Something{Thing: newThing(size)} }
func NewOtherthing(size int) *Otherthing { return &Otherthing{Thing: newThing(size)} }

func (s *Thing) GetSize() int { return s.Size }
func (s *Thing) GetChannel() chan int { return s.Out }

func main() {

things := []Measurable{}

pen := NewSomething(7)
paper := NewOtherthing(5)

things = append(things, pen, paper)

for _, t := range things {
fmt.Printf("%T %d \n", t, t.GetSize())
}

for _, t := range things {
fmt.Printf("%+v \n", t.GetChannel())
}

// for _, t := range things {
// fmt.Printf("%+v", t.Thing.Size)
// }
}

注释代码是我正在努力学习的另一件事。我可以通过使用在父类(super class)型上声明的方法来获取值,但不能通过直接从子类型访问来获取值。当然,我可以用 t.(*bothTheThingTypes).Size 解析类型,但我失去了动态性,我没有完全理解这个......

最佳答案

What I'm trying to understand is why I can get the value of size .GetSize() from both the child structs, but I don't have the same success with the channel field .GetChannel()

type Measurable interface {
GetSize() int
}

...

things := []Measurable{}
for _, t := range things {
fmt.Printf("%+v \n", t.GetChannel())
}

我可能没有捕获要点,但这似乎完全是由于您的 Measurable 接口(interface)没有 GetChannel 方法造成的。

关于go - 遍历 []interfaces{} 并获取每种类型的 channel 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267271/

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