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  }