package api import ( "fmt" "io" "os" ) type Widget struct { Hello Credits Writer io.Writer } type MethodResponder interface { Respond(io.Writer, ...string) error } type Method string func NewWidget(name, id string, author, homepage string) *Widget { return &Widget{ Hello: Hello{ Name: name, ID: id, Version: 1, }, Credits: Credits{ Author: author, Homepage: homepage, }, Writer: os.Stdout, } } func (w *Widget) Handle() error { if len(os.Args) < 2 { return fmt.Errorf("no method") } switch Method(os.Args[1]) { case MethodHello: return w.Hello.Respond(w.Writer) case MethodCredits: return w.Credits.Respond(w.Writer) } return fmt.Errorf("unknown method: %s", os.Args[1]) }