interface的变量赋值时,须要查看右侧对象是否实现interface的办法集,若实现,则赋值Ok,否则不能被赋值。
常见问题
type tester interface {
test()
string() string
}
type data struct {}
func (d *data) test() {}
func (d data) string() string {
return ""
}
赋值:
func main() {
var d data
//谬误
//data实现的办法:string()
var t tester = d
//正确
//*data实现的办法:string()和test()
t = &d //ok
t.test()
}
典型利用
在类型的办法定义时,个别场景下都会定义为指针办法:
func (d *data) test() {}
所以在对interface变量赋值时,个别应用指针赋值:
var d data
var t tester = &d
发表回复