3

Go 结构可以从另一个结构的类型继承一组值吗?

像这样的东西。

type Foo struct {
    Val1, Val2, Val3 int
}

var f *Foo = &Foo{123, 234, 354}

type Bar struct {
    // somehow add the f here so that it will be used in "Bar" inheritance
    OtherVal string
}

这会让我这样做。

b := Bar{"test"}
fmt.Println(b.Val2) // 234

如果不是,可以使用什么技术来实现类似的效果?

4

1 回答 1

9

以下是在 Bar one 中嵌入 Foo 结构的方法:

type Foo struct {
    Val1, Val2, Val3 int
}
type Bar struct {
    Foo
    OtherVal string
}
func main() {
    f := &Foo{123, 234, 354}
    b := &Bar{*f, "test"}
    fmt.Println(b.Val2) // prints 234
    f.Val2 = 567
    fmt.Println(b.Val2) // still 234
}

现在假设您不希望复制这些值并且希望b在更改时进行f更改。然后你不想嵌入而是用指针组合:

type Foo struct {
    Val1, Val2, Val3 int
}
type Bar struct {
    *Foo
    OtherVal string
}
func main() {
    f := &Foo{123, 234, 354}
    b := &Bar{f, "test"}
    fmt.Println(b.Val2) // 234
    f.Val2 = 567
    fmt.Println(b.Val2) // 567
}

两种不同的构图,具有不同的能力。

于 2012-09-21T19:03:26.570 回答