在 Go 语言中,非接口的任意类型 T() 都不能直接调用 *T 的方法,反过来 可以。
原因:
- Go 语言的方法接收者是类型,而不是值。
- 非接口类型的值不能隐式转换为指针类型。
示例:
Go
type T struct {
x int
}
func (t T) f() {
fmt.Println(t.x)
}
func main() {
t := T{10}
// t.f() // 编译错误:无法将 T 隐式转换为 *T
(&t).f() // 可以调用 *T 的方法
}
在这个示例中,我们定义了一个类型 T
和一个方法 f()
。f()
的接收者是类型 T
。
*非接口类型的任意类型 T() 都不能直接调用 T 的方法:
- 因为非接口类型的值不能隐式转换为指针类型。
- 编译器会报错:无法将 T 隐式转换为 *T。
反过来可以:
- 可以使用取址运算符
&
将非接口类型的值转换为指针类型。 - 然后就可以调用指针类型的方法。
总结:
- 在 Go 语言中,非接口的任意类型 T() 都不能直接调用 *T 的方法。
- 可以使用取址运算符
&
将非接口类型的值转换为指针类型,然后就可以调用指针类型的方法。