3 回答
TA贡献1982条经验 获得超2个赞
如果您不知道值的类型,则只需检查值是否实现了接口。如果类型已知,则该检查由编译器自动完成。
如果你真的想检查一下,你可以用你给出的第二种方法来做:
var _ Somether = (*MyType)(nil)
这会在编译时出错:
prog.go:23: cannot use (*MyType)(nil) (type *MyType) as type Somether in assignment:
*MyType does not implement Somether (missing Method method)
[process exited with non-zero status]
您在这里所做的是将MyType类型(和nil值)的指针分配给类型的变量Somether,但由于变量名称是_它被忽略。
如果MyType实现Somether,它将编译并且什么都不做
TA贡献1883条经验 获得超3个赞
也可以通过以下方式使用Implements(u Type) bool方法reflect.Type:
package main
import (
"reflect"
)
type Somether interface {
Method() bool
}
type MyType string
func (mt MyType) Method() bool {
return true
}
func main() {
inter := reflect.TypeOf((*Somether)(nil)).Elem()
if reflect.TypeOf(MyType("")).Implements(inter) {
print("implements")
} else {
print("doesn't")
}
}
您可以在文档中阅读更多相关内容。
- 3 回答
- 0 关注
- 141 浏览
添加回答
举报