赞
踩
- 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这种方式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。