// 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. // Test general operation using a list implementation. package main type Item interface { Print() string } type ListItem struct { item Item next *ListItem } type List struct { head *ListItem } func (list *List) Init() { list.head = nil } func (list *List) Insert(i Item) { item := new(ListItem) item.item = i item.next = list.head list.head = item } func (list *List) Print() string { r := "" i := list.head for i != nil { r += i.item.Print() i = i.next } return r } // Something to put in a list type Integer struct { val int } func (this *Integer) Init(i int) *Integer { this.val = i return this } func (this *Integer) Print() string { return string(this.val + '0') } func main() { list := new(List) list.Init() for i := 0; i < 10; i = i + 1 { integer := new(Integer) integer.Init(i) list.Insert(integer) } r := list.Print() if r != "9876543210" { panic(r) } }