[go语言]抽象接口和接口实现之间的赋值

本文探讨了Go语言中接口和工厂模式的使用。通过定义`Toy`接口和`ToyFactory`接口,展示了如何创建`cat`和`dog`两种类型的玩具,并实现了各自不同的`Speak`方法。代码示例中,`catFactory`和`dogFactory`实现了`ToyFactory`接口,用于创建相应类型的玩具对象。在`main`函数中,展示了如何通过工厂方法动态创建玩具并调用其方法,以及接口赋值和类型转换的相关规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

type Toy interface{
	Speak()
}
type ToyFactory interface {
	Create()Toy
}

type catFactory struct{
}
type cat struct{

}
func (this *cat)Speak(){
	fmt.Println("喵喵")
}
func (this *catFactory)Create()Toy{
	return &cat{}
}
type dog struct{

}
func(this* dog)Speak(){
	fmt.Println("汪汪")
}
type dogFactory struct{

}
func(this *dogFactory)Create()Toy{
	return &dog{}
}
func main(){
	c:=&catFactory{}
	d:=&dogFactory{}
	p:=map[int]ToyFactory{}
	p[0]=c
	p[1]=d
	for _,v:=range p{
		v.Create().Speak()
	}
	var F ToyFactory
	F=c
	F.Create().Speak()

    N:=new(ToyFactory)
    N=c     //报错


}

原因: 接口类本身是索引类型,而实现接口的类是具体类型,所以具体类型的指针才能赋值给抽象接口,抽象接口也不应该用new这种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值