github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2012/goforc/interface.go (about) 1 // +build OMIT 2 3 package main 4 5 import "fmt" 6 7 type Point struct{ x, y int } 8 9 func (p Point) String() string { return fmt.Sprintf("Point{%d, %d}", p.x, p.y) } 10 11 type Celsius float32 12 type Fahrenheit float32 13 14 func (t Celsius) String() string { return fmt.Sprintf("%g°C", t) } 15 func (t Fahrenheit) String() string { return fmt.Sprintf("%g°F", t) } 16 func (t Celsius) ToFahrenheit() Fahrenheit { return Fahrenheit(t*9/5 + 32) } 17 18 func main() { 19 // START OMIT 20 type Stringer interface { 21 String() string 22 } 23 24 var v Stringer // HL 25 var corner = Point{1, 1} 26 var boiling = Celsius(100) 27 28 v = corner 29 fmt.Println(v.String()) // dynamic dispatch 30 fmt.Println(v) 31 32 v = boiling.ToFahrenheit() 33 fmt.Println(v.String()) // dynamic dispatch 34 fmt.Println(v) 35 // STOP OMIT 36 }