首页 > 解决方案 > 是否可以将具有许多项目的结构转换为具有这些项目子集的结构?

问题描述

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

像一个接口,但有属性。

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

标签: go

解决方案


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

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)
}

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


推荐阅读