Source file
test/ken/rob1.go
1
2
3
4
5
6
7
8
9 package main
10
11 type Item interface {
12 Print() string
13 }
14
15 type ListItem struct {
16 item Item
17 next *ListItem
18 }
19
20 type List struct {
21 head *ListItem
22 }
23
24 func (list *List) Init() {
25 list.head = nil
26 }
27
28 func (list *List) Insert(i Item) {
29 item := new(ListItem)
30 item.item = i
31 item.next = list.head
32 list.head = item
33 }
34
35 func (list *List) Print() string {
36 r := ""
37 i := list.head
38 for i != nil {
39 r += i.item.Print()
40 i = i.next
41 }
42 return r
43 }
44
45
46 type Integer struct {
47 val int
48 }
49
50 func (this *Integer) Init(i int) *Integer {
51 this.val = i
52 return this
53 }
54
55 func (this *Integer) Print() string {
56 return string(this.val + '0')
57 }
58
59 func main() {
60 list := new(List)
61 list.Init()
62 for i := 0; i < 10; i = i + 1 {
63 integer := new(Integer)
64 integer.Init(i)
65 list.Insert(integer)
66 }
67
68 r := list.Print()
69 if r != "9876543210" {
70 panic(r)
71 }
72 }
73
View as plain text