github.com/traefik/yaegi@v0.15.1/_test/switch18.go (about)

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