[Go语言基础问题]为什么声明在指针上的方法可以通过地址变量赋值给对应的接口?
1. 运行环境
go version go1.19 windows/amd64
2. 问题描述?
我理解在Go语言中,通过原始类型的变量调用声明在指针类型上的方法或者通过指针变量调用声明在原始类型上的方法实际上是Go的语法糖,但是有这么一条规则我在学习的时候一直没理解原因是什么。
如下代码所示,我将T类型的变量t赋值给I接口类型的变量i是不可以的,因为t没有实现M方法,很好理解
package main
type T int
type I interface {
M()
}
func (t *T) M() {}
func main() {
var t T
var i I
i = t //无法赋值,提示t未实现M方法
}
但是为什么反过来,如果方法是声明在T类型上,赋值时使用指针就可以了
package main
type T int
type I interface {
M()
}
func (t T) M() {}
func main() {
var t T
var i I
i = &t //这是可以赋值,但是&t也没有实现M方法呀
}
www.bilibili.com/video/BV1NK4y137P...
有个视频讲解得很细,可以了解下