0

golang で継承を実装しようとしています。以下に例を示します。

type A struct {
  Number int
}

type B struct{
  A
  name String
}

func (a A) GetNumber() {
    // Here I want to use instance of B
    fmt.Println(a) // but this is giving me instance of A
}

AがBに継承されている場合、Aの関数でBのインスタンスを取得することは可能ですか?

4

1 に答える 1

2

まず、コードにエラーがあります。Stringに修正する必要があるため、定義された別のタイプを作成しない限りstring

次に、Go では複合構造体を使用できます。これは、既に行ったように、別の構造体に含まれる構造体フィールドに直接アクセスできることを意味します。

これは、構造体フィールドが宣言されているメソッド レシーバーでメソッドを呼び出すことができることを意味します。あなたの例を修正するには、あなたの質問を正しく理解していれば:

package main

import (
    "fmt"
)

type A struct {
    Number int
}

type B struct{
    A
    name string
}

func main() {
    b := &B{A{1}, "George"}
    b.GetValues()
}

func (b B) GetValues() {    
    fmt.Println(b.Number)
    fmt.Println(b.name)
}

以下の例では、struct Aが含まれているため、GetValues メソッドでstruct B宣言された構造体フィールドを呼び出すことができます。struct Aこれは、フィールドstruct Bを継承するためです。struct A

https://play.golang.org/p/B-XJc6jddE

于 2016-05-13T08:00:30.847 に答える