gpt4 book ai didi

go - 如何将嵌入式接口(interface)分配给golang中的对象

转载 作者:IT王子 更新时间:2023-10-29 01:47:28 25 4
gpt4 key购买 nike

<分区>

我正在尝试将 Baz 类型的结构数组分配给嵌入第二个 Foo 类型结构中的 Bar 类型的接口(interface)数组。我无法在这里或其他地方使用谷歌搜索找到确切的信息。我提供了一个最低限度的工作示例。

我收到以下错误:

$ 去运行 main.go

./main.go:38: 不能在 NewFoo 的参数中使用 baz(类型 []*Baz)作为类型 []Bar

如果我的代码不是地道的 go 并且我没有完全确认发布问题的标准,我深表歉意,这是我的第一篇文章。

package main


import (
"fmt"
)
type Foo struct {
b []Bar
}



type Baz struct {
a, b int
}

type Bar interface {
Multiply() int
}

func (baz *Baz) Multiply() int{
return baz.a * baz.b
}

func NewFoo(bar []Bar) *Foo{
return &Foo{b: bar}
}
func NewBaz() []*Baz {
bazes := make([]*Baz, 2)
bazes[0] = &Baz{a: 1, b: 2}
bazes[1] = &Baz{a: 3, b: 4}
return bazes
}

func main() {

baz := NewBaz()
foo := NewFoo(baz)
for _, f := range foo.b {
fmt.Println("Foo.Multiply ", f.Multiply())
}
}

更新:在进一步阅读和理解建议的相关帖子后,我批准了重复投票。感谢那些向我指出那个方向的人。对于 future 有兴趣的读者,我最终符合我的用例的实现如下:

package main

import (
"fmt"
)

type Foo struct {
b []Bar
}

type Baz struct {
a, b int
}

type Bar interface { //
Multiply() int
}

func (baz *Baz) Multiply() int {
return baz.a * baz.b
}

func NewFoo(bar []*Baz) *Foo{
f := &Foo{}
f.b = make([]Bar, 2)
fmt.Println("len(bar) ", len(bar), "len(f.b)", len(f.b) )
for i, _ := range f.b {
f.b[i] = bar[i]

}
return f
}

func MakeBaz() []*Baz {
bazes := make([]*Baz, 2)
bazes[0] = NewBaz(1, 2)
bazes[1] = NewBaz(3, 4)
return bazes
}

func NewBaz(aa, bb int) *Baz {
return &Baz{a: aa, b: bb}
}

func main() {
baz := MakeBaz()
foo := NewFoo(baz)
fmt.Printf("%v\n", foo)
for _, f := range foo.b {
fmt.Println("Foo.Multiply ", f.Multiply())
}
}

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