| // +build ignore,OMIT |
| |
| package main |
| |
| import "fmt" |
| |
| type Point struct{ x, y int } |
| |
| func (p Point) String() string { return fmt.Sprintf("Point{%d, %d}", p.x, p.y) } |
| |
| type Celsius float32 |
| type Fahrenheit float32 |
| |
| func (t Celsius) String() string { return fmt.Sprintf("%g°C", t) } |
| func (t Fahrenheit) String() string { return fmt.Sprintf("%g°F", t) } |
| func (t Celsius) ToFahrenheit() Fahrenheit { return Fahrenheit(t*9/5 + 32) } |
| |
| func main() { |
| // START OMIT |
| type Stringer interface { |
| String() string |
| } |
| |
| var v Stringer // HL |
| var corner = Point{1, 1} |
| var boiling = Celsius(100) |
| |
| v = corner |
| fmt.Println(v.String()) // dynamic dispatch |
| fmt.Println(v) |
| |
| v = boiling.ToFahrenheit() |
| fmt.Println(v.String()) // dynamic dispatch |
| fmt.Println(v) |
| // STOP OMIT |
| } |