Chapter 11 - Interfaces
Exercise 2: Type Assertions
Here are updated Fan and CoffeePot types, both of which satisfy an Appliance interface. We’ve also added a Use method that accepts an Appliance. Currently, Use only calls the TurnOn method on the Appliance…
Update Use so that it calls Oscillate on the Appliance if (and only if) it’s a Fan. Use should also call Brew on the Appliance if (and only if) it’s a CoffeePot.
Solution
package main
import "fmt"
type Appliance interface {
TurnOn()
}
type Fan string
func (f Fan) TurnOn() {
fmt.Println("Spinning")
}
func (f Fan) Oscillate() {
fmt.Println("Rotating on base")
}
type CoffeePot string
func (c CoffeePot) TurnOn() {
fmt.Println("Powering up")
}
func (c CoffeePot) Brew() {
fmt.Println("Heating Up")
}
func Use(appliance Appliance) {
fmt.Println(appliance)
appliance.TurnOn()
// YOUR CODE HERE: If the appliance is a
// Fan, call its Oscillate method.
fan, ok := appliance.(Fan)
if ok {
fan.Oscillate()
}
// If the appliance is a CoffeePot, call
// its Brew method.
coffeePot, ok := appliance.(CoffeePot)
if ok {
coffeePot.Brew()
}
}
func main() {
Use(Fan("Windco Breeze"))
Use(CoffeePot("LuxBrew"))
}Output:
Windco Breeze
Spinning
Rotating on base
LuxBrew
Powering up
Heating Up