2012-09-21 9 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 
} 

现在假设你不想被复制的价值和你想如果f变化b改变。然后你不想嵌入,但用指针组合:

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

我认为你的第一个解决方案将会尽可能地接近我。我头脑里的东西就像这个JavaScript'var proto = {val1:123,val2:234,val3:345}; var inst = Object.create(proto);'再次感谢。 –