关于golang:go-interface赋值为对象or对象指针

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理