1、如果Add函数的调用代码为:
func main() {var a Integer = 1var b Integer = 2var i interface{} = &asum := i.(*Integer).Add(b)fmt.Println(sum)
}
则Add函数定义正确的是()
A.type Integer int
func (a Integer) Add(b Integer) Integer {return a + b
}B.
type Integer int
func (a Integer) Add(b *Integer) Integer {return a + *b
}C.
type Integer int
func (a *Integer) Add(b Integer) Integer {return *a + b
}D.
type Integer int
func (a *Integer) Add(b *Integer) Integer {return *a + *b
}
参考答案:AC
2、如果Add函数的调用代码为:
func main() {var a Integer = 1var b Integer = 2var i interface{} = asum := i.(Integer).Add(b)fmt.Println(sum)
}
则Add函数定义正确的是()
A.type Integer int
func (a Integer) Add(b Integer) Integer {return a + b
}B.
type Integer int
func (a Integer) Add(b *Integer) Integer {return a + *b
}C.
type Integer int
func (a *Integer) Add(b Integer) Integer {return *a + b
}D.
type Integer int
func (a *Integer) Add(b *Integer) Integer {return *a + *b
}
参考答案:A
3、关于GetPodAction定义,下面赋值正确的是()
type Fragment interface {Exec(transInfo *TransInfo) error
}
type GetPodAction struct {
}
func (g GetPodAction) Exec(transInfo *TransInfo) error {...return nil
}A. var fragment Fragment = new(GetPodAction)
B. var fragment Fragment = GetPodAction
C. var fragment Fragment = &GetPodAction{}
D. var fragment Fragment = GetPodAction{}
参考答案:ACD
考察知识点
指针与值类型实现接口的区别
package mainimport ("fmt"
)type People interface {ReturnName() string
}type Student struct {Name string
}type Teacher struct {Name string
}func (s Student) ReturnName() string {return s.Name
}func (t *Teacher) ReturnName() string {return t.Name
}func main() {cbs := Student{Name: "咖啡色的羊驼"}sss := Teacher{Name: "咖啡色的羊驼的老师"}// 值类型var a Peoplea = cbsname := a.ReturnName()fmt.Println(name)// 指针类型//a = sss // <- 这样写不行!!!a = &sss // 由于是指针类型,所以赋值的时候需要加上&name = a.ReturnName()fmt.Println(name) // 输出"咖啡色的羊驼的老师"
}
“a = sss”这样写会发生报错:
cannot use sss (type Teacher) as type People in assignment:
Teacher does not implement People (ReturnName method has pointer receiver)
因为是Teacher的指针实现了ReturnName方法,Teacher本身没实现。
总结:
1.当是指针类型,它的方法可以是指针接收者,或者是值接收者
2.当是值类型,它的方法只能是值接收者