| // +build ignore,OMIT |
| |
| package main |
| |
| import "fmt" |
| |
| type Leaf int |
| |
| func (l Leaf) Sum() int { return int(l) } |
| func (l Leaf) String() string { return fmt.Sprintf("%d", l) } |
| |
| type Branch struct{ left, rhs Tree } |
| |
| func (b *Branch) Sum() int { return b.left.Sum() + b.rhs.Sum() } |
| func (b *Branch) String() string { return fmt.Sprintf("(%s, %s)", b.left, b.rhs) } |
| |
| type Tree interface { |
| Sum() int |
| } |
| |
| func main() { |
| var tree Tree = Leaf(42) |
| fmt.Println(tree.Sum()) |
| |
| if unknown { |
| tree = &Branch{tree, Leaf(123)} |
| } |
| fmt.Println(tree.Sum()) |
| fmt.Println(tree) |
| } |
| |
| var unknown bool |
| |
| // |
| |
| func _() { |
| type Answer struct{ right bool } |
| var x struct { |
| Answer |
| Branch |
| } |
| fmt.Println(x.right) |
| } |