2016-05-13 9 views
0

golangで継承を実装しようとしています。以下は は一例です: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のインスタンスを取得することが可能ですか?

+2

Goに継承はありません。いくつかの関連する/可能な重複:[1](http://stackoverflow.com/questions/21251242/is-it-possible-to-call-overridden-method-from-parent-struct-in-golang)、[two] (http://stackoverflow.com/questions/30622605/can-embedded-struct-method-have-knowledge-of-parent-child)、[3](http://stackoverflow.com/questions/29390736/go-埋め込み構造体呼び出しの子メソッドの代わりに親メソッド)、[4](http://stackoverflow.com/questions/29144622/what-is-the-idiomaticway-in-go-to-create -a-complex-hierarchy-of-structs)を使用します。 – icza

答えて

1

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

Goでは、複合構造体を使用できます。つまり、すでに行ったように別の構造体に含まれている構造体フィールドに直接アクセスできます。

これは、structフィールドが宣言されているメソッド受信側でメソッドを呼び出すことができることを意味します。以下の例struct Astruct Bに含まれているため、これはあなたがGetValuesメソッドでstruct Aで宣言された構造体のフィールドを呼び出すことができることを意味して

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 Bstruct Aフィールドを継承しているためです。

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

関連する問題