go语言中的接口interface

概述package main; import "fmt" //接口interface //接口是一个或多个方法签名的集合 //只要某个类型拥有该接口的所有方法签名,即算实现该接口。 /
package main;import "fmt"//接口interface//接口是一个或多个方法签名的集合//只要某个类型拥有该接口的所有方法签名,即算实现该接口。//接口只有方法声明,没有实现,没有数据字段//接口可以匿名嵌入其它接口,或嵌入到结构中。//GO语言中的所有类型都实现了空接口type Empty interface {}type Inf interface {	getname() string;	setname(name string);}type InfB interface {	//这里把INF接口嵌入	Inf;	getAge() int;	setAge(age int);}type A struct {	name string;}type B struct {	name string;	age  int;}//结构A实现Inf的接口func (a *A) getname() string {	return a.name;}func (a *A) setname(name string) {	a.name = name;}//结构B实现InfB的接口func (b *B) getname() string {	return b.name;}func (b *B) setname(name string) {	b.name = name;}func (b *B) getAge() int {	return b.age;}func (b *B) setAge(age int) {	b.age = age;}//函数test接收一个INF类型的变量func test(i Inf) {	fmt.Println("ok");}//这里使用空接口类型接收参数func test2(e Empty) {	//判断属于哪个接口	if a,ok := e.(Inf); ok {		fmt.Println(a,"inf");	} else if a,ok := e.(InfB); ok {		fmt.Println(a,"infb")	}}//同上,另一种写法func test3(e Empty) {	switch a := e.(type) {	case Inf:		fmt.Println(a,"inf");	case InfB:		fmt.Println(a,"infb");	default:		fmt.Println(a,"no");	}}func main() {	a := A{};	a.setname("test");	fmt.Println(a,a.getname());	//注意这里需要用取地址符,因为上面的方法绑定都是(a *A)	test(&a);	test2(&a);	test3(&a);	b := B{};	b.setname("testb");	b.setAge(25);	fmt.Println(b.getname(),b.getAge());	//结构B实现了Inf和InfB两个接口	test(&b);	test2(&b);	test3(&b);	//接口InfB可以转化为Inf,但Inf不能转化为InfB	//只能从超集向子集转	c := B{};	//注意这里要传地址	var d Inf = Inf(&c);	d.setname("testc");	fmt.Println(d,d.getname());}

  

总结

以上是内存溢出为你收集整理的go语言中的接口interface全部内容,希望文章能够帮你解决go语言中的接口interface所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1271724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存