2012-09-21 4 views
3

Go 구조체는 다른 구조체의 형식에서 값 집합을 상속 할 수 있습니까?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 

그렇지 않은 경우 비슷한 기술을 얻기 위해 어떤 기술을 사용할 수 있습니까? 여기

답변

7

당신이 줄 하나에 푸 구조체를 포함 할 수 있습니다 방법은 다음과 같습니다

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 
} 

이제 값을 복사하고 싶지 않은 가정하고 bf 변경하는 경우 변경하려는. 그렇다면 삽입을 원하지 않지만 포인터로 구성하는 것이 좋습니다.

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 
} 

두 가지 종류의 구성이 다른 능력을가집니다.

+0

답변 해 주셔서 감사합니다. 복사는 제가 피하려고했던 것입니다. 궁극적 인 대답은 상속만으로는 불가능하다는 것입니다. –

+0

더 간단한 버전으로 편집했습니다. 그게 만족 스러운가? –

+0

당신의 첫 번째 해결책은 제가 가깝게 될 것이라고 생각합니다. 제가 머리 속에 가지고있는 것은 다음과 같습니다.'var proto = {val1 : 123, val2 : 234, val3 : 345}; var inst = Object.create (proto);'다시 한번 감사드립니다. –

관련 문제