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