// Chapter 26 example: a dog with state, a newDog function and a method. // Run with: go run exercises/26/05-dog.go package main import "fmt" type dog struct { name string barksLeft int } func newDog(name string, barksLeft int) dog { return dog{name: name, barksLeft: barksLeft} } func (d dog) bark() dog { if d.barksLeft <= 0 { fmt.Printf("%s is hoarse.\n", d.name) return d } fmt.Printf("%s: Woof!\n", d.name) d.barksLeft = d.barksLeft - 1 return d } func main() { rex := newDog("Rex", 3) rex = rex.bark() rex = rex.bark() rex = rex.bark() rex = rex.bark() }