// +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) }