計算機科学のブログ

ほしい物リスト

Go - what can you do? - Interfaces - type assertions

Head First GoJay 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
%