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 7package main 8 9type Element interface { 10} 11 12type Vector struct { 13 elem []Element; 14} 15 16func (v *Vector) At(i int) Element { 17 return v.elem[i]; 18} 19 20type TStruct struct { 21 name string; 22 fields *Vector; 23} 24 25func (s *TStruct) field(i int) *TStruct { 26 return s.fields.At(i).(*TStruct); 27} 28 29func 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