【问题标题】:Is it possible to convert a struct with many items into a struct with a subset of those items? [duplicate]是否可以将具有许多项目的结构转换为具有这些项目子集的结构? [复制]
【发布时间】:2020-04-03 15:40:42
【问题描述】:

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

类似于接口,但具有属性。

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


【解决方案1】:

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

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

类型断言也只能用于接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 2012-11-03
    • 2017-04-11
    • 2013-05-08
    相关资源
    最近更新 更多