乐趣区

关于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
退出移动版