是否可以将一个包含许多项的结构转换为包含这些项的子集的结构



我正在寻找一种方法,将一个较大的结构转换为另一个包含较大结构中属性子集的结构。

就像一个接口,但有属性。

package main
import "fmt"
type Foobar struct {
foo string
bar string
}
type Bar struct {
bar string
}
func main() {
foobar := Foobar{}
bar := foobar.(Bar)
fmt.Println(bar)
}

显然,以上内容不起作用:invalid operation: foobar (variable of type Foobar) is not an interface

但随后的尝试不起作用

func main() {
var foobar interface{} = Foobar{}
bar := foobar.(*Bar)
fmt.Println(bar)
}

panic: interface conversion: interface {} is main.Foobar, not main.Bar故障

不同的结构是不同的类型,不能相互分配。我认为,对于你正在尝试做的事情,你只需要一个嵌套的结构。

type (
Bar struct {
bar string
}
Foobar struct {
foo string
bar Bar
}
)
func main() {
foobar := Foobar{bar: Bar{"bbb"}}
bar := foobar.bar
fmt.Println(bar.bar)
}

此外,类型断言只能与接口一起使用。

最新更新