type Animal interface {
Speak()
}
type Cat struct {
Name string
}
func(c Cat)Speak() {
fmt.Println("Meow")
}
funcmain() {
var a Animal
a = Cat{Name: "kitty"}
a.Speak()
c := a.(Cat)
fmt.Println(c.Name)
}
c := a.(Cat) 如果类型断言的类型与实际存储的类型不符,会直接 panic。
所以实际开发中,通常使用另一种类型断言形式c, ok := a.(Cat)。如果类型不符,这种形式不会 panic,而是通过将第二个返回值置为 false 来表明这种情况。