Go - what can you do? - Interfaces - type assertions
Head First Go、 Jay McGavren(著)、O’Reilly Media)の Chapter 11(what can you do? - Interfaces)、p.339(Pool Puzzle)の解答を求めてみる。
コード
main.go
package main
import "fmt"
type Truck string
func (t Truck) Accelerate() {
fmt.Println("Speeding up")
}
func (t Truck) Brake() {
fmt.Println("Stopping")
}
func (t Truck) Steer(direction string) {
fmt.Println("Turning", direction)
}
func (t Truck) LoadCargo(cargo string) {
fmt.Println("Loading", cargo)
}
type Vehicle interface {
Accelerate()
Brake()
Steer(string)
}
func TryVehicle(vehicle Vehicle) {
vehicle.Accelerate()
vehicle.Steer("left")
vehicle.Steer("right")
vehicle.Brake()
truck, ok := vehicle.(Truck)
if ok {
truck.LoadCargo("test cargo")
}
}
func main() {
TryVehicle(Truck("Fnord F180"))
}
入出力結果(Terminal, Zsh)
% go run ./main.go
Speeding up
Turning left
Turning right
Stopping
Loading test cargo
%