1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
package main
import "fmt"
type fii interface {
Hello()
}
type Boo struct {
Name string
}
type Bir struct {
Boo
}
type Bar struct{}
func (b Bar) Hello() { fmt.Println("b:", b) }
func (b Boo) Hello() {
fmt.Println("Hello", b)
fmt.Println(b.Name)
}
func inCall(foo fii) {
fmt.Println("inCall")
switch a := foo.(type) {
case Boo:
a.Hello()
default:
fmt.Println("a:", a)
}
}
func main() {
boo := Bir{Boo{"foo"}}
inCall(boo)
inCall(Bar{})
}
// Output:
// inCall
// a: {{foo}}
// inCall
// a: {}
|