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 datavar t tester = &d