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