// 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) | |
} | |
} |