type T struct {
Name string
}
func (t T) M1 () {
t.Name = "name1"
}
func (t *T) M2 () {
t.Name = "name2"
}
type intf interface {
M1()
M2()
}
func main() {
var t1 T = T{"t1"}
t1.M1()
t1.M2()
var t2 intf = t1
t2.M1()
t2.M2()
}
为什么当我使用T类型的变量时,赋值给intf接口的时候,会出错,但是我使用var tf intf = &t1
的时候就是正确的
按理说,如果说var tf intf = t1
会出错,那么就说明t1,也就是T类型没有实现M2的方法,那么同理&t1,也就是T类型的指针,也没有实现M1的方法呀,但是为什么使用指针就能够赋值给接口~~~
有疑问加站长微信联系(非本文作者)

import ( "fmt" "reflect" )
type intf interface { M1() M2() }
type T struct { Name string }
func(t T) M1() { t.Name = "name1" }
func(t *T) M2() { t.Name = "name2" }
func main() { var t1 T = T{"1"} var t2 intf = &t1
}
the count of Method: 2 0 M1 func(main.T) 1 M2 func(main.T)
command-line-arguments
./test.go:26:6: cannot use &t1 (type T) as type intf in assignment: T does not implement intf (missing M1 method) ```
天哪,这格式乱了
因为函数接收者接收T类型的参数时,T类型及T类型都能实现,接收T类型参数时,只有*T类型的能实现,你可以看看 go语言实战 这本书,在第五章有详细说明,或者参考go语言官方规范定义
因为函数接收者接收T类型的参数时,T类型及T类型都能实现,接收T类型参数时,只有T类型的能实现,你可以看看 go语言实战 这本书,在第五章有详细说明,或者参考go语言官方规范定义
这网站会吃字符吗,我的星号一会在,一会不在
因为函数接收者接收T类型的参数时,T类型及T的指针类型都能实现,接收T的指针类型参数时,只有T的指针类型的能实现。(是这个意思嘛~