// run // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main type Element interface { } type Vector struct { elem []Element; } func (v *Vector) At(i int) Element { return v.elem[i]; } type TStruct struct { name string; fields *Vector; } func (s *TStruct) field(i int) *TStruct { return s.fields.At(i).(*TStruct); } func main() { v := new(Vector); v.elem = make([]Element, 10); t := new(TStruct); t.name = "hi"; v.elem[0] = t; s := new(TStruct); s.name = "foo"; s.fields = v; if s.field(0).name != "hi" { panic("bad name") } }