You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
830 B
60 lines
830 B
9 years ago
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
type Pet struct {
|
||
|
Name string
|
||
|
IsRunning bool
|
||
|
}
|
||
|
|
||
|
func NewPet(name string) *Pet {
|
||
|
return &Pet{Name: name}
|
||
|
}
|
||
|
|
||
|
func (p *Pet) Run() string {
|
||
|
p.IsRunning = true
|
||
|
return p.Name + " is running"
|
||
|
}
|
||
|
|
||
|
type Dog struct {
|
||
9 years ago
|
*Pet
|
||
9 years ago
|
|
||
|
currentChaseTarget *Pet
|
||
|
}
|
||
|
|
||
|
func NewDog(name string) *Dog {
|
||
9 years ago
|
return &Dog{Pet: NewPet(name)}
|
||
9 years ago
|
}
|
||
|
|
||
|
func (d *Dog) Chase(target *Pet) string {
|
||
|
d.IsRunning = true
|
||
|
d.currentChaseTarget = target
|
||
|
d.currentChaseTarget.Run()
|
||
|
|
||
|
return d.Name + " is chasing " + target.Name
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
cat := NewPet("Felix")
|
||
|
|
||
|
fmt.Printf("%#v\n", cat)
|
||
|
|
||
|
cat.Run()
|
||
|
|
||
|
fmt.Printf("%#v\n", cat)
|
||
|
|
||
|
dog := NewDog("Fido")
|
||
|
|
||
9 years ago
|
fmt.Printf("%#v\n", dog)
|
||
|
|
||
|
dog.Run()
|
||
|
|
||
|
fmt.Printf("%#v\n", dog)
|
||
|
|
||
9 years ago
|
fmt.Printf("%#v\n", dog)
|
||
|
fmt.Printf("%#v\n", dog.Chase(cat))
|
||
|
|
||
|
fmt.Printf("%#v\n", dog)
|
||
|
fmt.Printf("%#v\n", cat)
|
||
|
}
|