1 // run 2 3 // Copyright 2009 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 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