// $G $D/$F.go && $L $F.$A && ./$A.out | |
// 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 Item interface { | |
Print(); | |
} | |
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() { | |
i := list.head; | |
for i != nil { | |
i.item.Print(); | |
i = i.next; | |
} | |
} | |
// 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() { | |
print(this.val); | |
} | |
func | |
main() { | |
list := new(List); | |
list.Init(); | |
for i := 0; i < 10; i = i + 1 { | |
integer := new(Integer); | |
integer.Init(i); | |
list.Insert(integer); | |
} | |
list.Print(); | |
print("\n"); | |
} |