1. 通过Implements方法
1.1 方法定义
ImplementsType
type Type interface {
...
// Implements reports whether the type implements the interface type u.
Implements(u Type) bool
...
}
1.2 实践
doganimaltrue
package main
import (
"fmt"
"reflect"
)
type dog struct {
}
type animal interface {
speak()
}
func (a *dog) speak() {
fmt.Println("wang wang wang!")
}
func main() {
typ_dog := reflect.TypeOf(&dog{})
typ_animal := reflect.TypeOf((*animal)(nil)).Elem()
fmt.Println(typ_dog.Implements(typ_animal))
}
2. 通过赋值/传参的方式
doganimal
package main
import (
"fmt"
)
type dog struct {
}
type animal interface {
speak()
}
func (a *dog) speak() {
fmt.Println("wang wang wang!")
}
func test(a animal) {
fmt.Println("success")
}
func main() {
test(&dog{})
}
doganimalmain
var _ animal = (*dog)(nil)var _ animal = &dog{}
3. 通过断言的方式
接口.(类型)
package main
import (
"fmt"
)
type dog struct {
}
type animal interface {
speak()
}
func (a *dog) speak() {
fmt.Println("wang wang wang!")
}
func test(a animal) {
if _, ok := a.(*dog); ok {
fmt.Println("success")
}
}
func main() {
test(&dog{})
}
下图是没有实现接口时的报错
ps: 类似的断言方法还有(下面一串代码a的值为nil,ok为false)
func main() {
var a animal
if _, ok := a.(*dog); ok {
fmt.Println(ok)
}
}
if _, ok := 接口.(类型)