// $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"); }