1
2
3
4
5
6
7 package main
8
9 type Element interface {
10 }
11
12 type Vector struct {
13 elem []Element;
14 }
15
16 func (v *Vector) At(i int) Element {
17 return v.elem[i];
18 }
19
20 type TStruct struct {
21 name string;
22 fields *Vector;
23 }
24
25 func (s *TStruct) field(i int) *TStruct {
26 return s.fields.At(i).(*TStruct);
27 }
28
29 func main() {
30 v := new(Vector);
31 v.elem = make([]Element, 10);
32 t := new(TStruct);
33 t.name = "hi";
34 v.elem[0] = t;
35 s := new(TStruct);
36 s.name = "foo";
37 s.fields = v;
38 if s.field(0).name != "hi" {
39 panic("bad name")
40 }
41 }
42
View as plain text