I am struggling with Go's Type Assertion mechanism. In the below example the Type Assertion for Qux.(Bar) fails.
Why does a direct implementation of DoBar() at Qux not fullfill the Bar interface?
package main
import (
    "fmt"
)
type Nameable interface {
    Name() string
}
type Foo interface {
    Nameable
    DoFoo() string
}
type Bar interface {
    Nameable
    DoBar() string
}
type bar struct {
    name string
}
func (b bar) Name() string {
    return b.name
}
// Qux embeds bar and is expected to fullfill Nameable interface
type Qux struct {
    bar
}
func (q *Qux) DoBar() string {
    return "DoBar"
}
func Check(subject Nameable) {
    if N, ok := subject.(Nameable); ok {
        fmt.Printf("%s has Nameable\n", N.Name())
    } 
    if F, ok := subject.(Foo); ok {
        fmt.Printf("%s has Foo: %s\n", F.Name(), F.DoFoo())
    }
    if B, ok := subject.(Bar); ok {
        fmt.Printf("%s has Bar: %s\n", B.Name(), B.DoBar())
    }
}
func main() {
    Check(bar{name: "bar"})
    Check(Qux{bar: bar{name: "Qux"}})
}
https://play.golang.org/p/PPkUMUu58JW
Output:
bar has Nameable
Qux has Nameable
 
    