interface 実装パターン

package main

import "log"

type Worker interface {
    Hello() string
}

type User struct {
    Name string
}

func (u User) Hello() string {
    return u.Name
}

func Hello(w Worker) string {
    return w.Hello()
}

func main() {
    u := User{Name: "yohei"}    
    w := Worker(u)

    // 以下のやり方でも良い
    // var w Worker
    // w = u

    log.Print(Hello(w))
}