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