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

Foo構造体をBaroneに埋め込む方法は次のとおりです。

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
}

能力の異なる2種類の作曲。

于 2012-09-21T19:03:26.570 に答える