golang我们如何确保某个类型实现了某个接口的所有方法

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了golang我们如何确保某个类型实现了某个接口的所有方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_406_0@https://geektutu.COM/post/quick-golang.htML

接口(interfaces)

一般而言,接口定义了一组方法的集合,接口不能被实例化,一个类型可以实现多个接口。

举一个简单的例子,定义一个接口 PErson和对应的方法 getName() 和 getAge()

123456789101112131415161718192021222324252627282930
type Person interface {	getName() string}type Student struct {	name string	age  int}func (stu *Student) getName() string {	return stu.name}type Worker struct {	name   string	gender string}func (w *Worker) getName() string {	return w.name}func main() {	VAR p Person = &Student{		name: "Tom",		age:  18,	}	fmt.PRintln(p.getName()) // Tom}
  • Go 语言中,并不需要显式地声明实现了哪一个接口,只需要直接实现该接口对应的方法即可。
  • 实例化 Student后,强制类型转换为接口类型 Person。

在上面的例子中,我们在 main 函数中尝试将 Student 实例类型转换为 Person,如果 Student 没有完全实现 Person 的方法,比如我们将 (*Student).getName() 删掉,编译时会出现如下报错信息。

1
*Student does not implement Person (missing getName method)

但是删除 (*Worker).getName() 程序并不会报错,因为我们并没有在 main 函数中使用。这种情况下我们如何确保某个类型实现了某个接口的所有方法呢?一般可以使用下面的方法进行检测,如果实现不完整,编译期将会报错。

12
var _ Person = (*Student)(nil)var _ Person = (*Worker)(nil)
  • 将空值 nil 转换为 *Student 类型,再转换为 Person 接口,如果转换失败,说明 Student 并没有实现 Person 接口的所有方法。
  • Worker 同上。

实例可以强制类型转换为接口,接口也可以强制类型转换为实例。

123456789
func main() {	var p Person = &Student{		name: "Tom",		age:  18,	}	stu := p.(*Student) // 接口转为实例	fmt.Println(stu.getAge())}

6.3 空接口

如果定义了一个没有任何方法的空接口,那么这个接口可以表示任意类型。例如

1234567
func main() {	m := make(map[string]interface{})	m["name"] = "Tom"	m["age"] = 18	m["scores"] = [3]int{98, 99, 85}	fmt.Println(m) // map[age:18 name:Tom scores:[98 99 85]]}

脚本宝典总结

以上是脚本宝典为你收集整理的golang我们如何确保某个类型实现了某个接口的所有方法全部内容,希望文章能够帮你解决golang我们如何确保某个类型实现了某个接口的所有方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。