November 2017
Intermediate to advanced
670 pages
17h 35m
English
There's yet another common Go pattern at play in our code:
err := d.Stroke(se, strokeSupply, pond)if err != nil { log.Fatal(err) // the duck died!}
Errors should be handled once and as soon as possible.
Some consider this as an antipattern that litters code with if err != nil blocks. We'll overlook that sentiment, for now, in favor of its simplicity and pragmatism.
Next, we'll define a Capabilities struct that embeds both behavior interfaces and all the important strokes fields. The Capabilities type defines what the duck can do. It has a number of strokes that it can use to cross each pond and two behaviors--one that increases its stroke count and the other that reduces the count but helps it to get close to its ...