go非接口的任意类型T()都能够调用*T的方法吗?反过来呢?
go的类型T()可以调用T的方法,因为T本质上是一个指针类型。然而,如果T是一个非接口类型,则不能将T类型的值直接转换为T类型,也就无法调用*T的方法。
但是,如果T实现了接口类型,则可以通过类型断言来调用*T的方法。例如:
type MyType struct {
// Some fields...
}
func (t *MyType) MyMethod() {
// Some code...
}
type MyInterface interface {
MyMethod()
}
var x MyType
// This will not work, because x is not a pointer to MyType:
x.MyMethod()
// But this will work, because we can assert that x implements the
// MyInterface interface, which requires a pointer receiver:
y := x.(MyInterface)
y.MyMethod()
反过来,如果T实现了接口类型,则可以将T类型的值直接转换为该接口类型的值,并调用该接口的方法。例如:
type MyType struct {
// Some fields...
}
func (t *MyType) MyMethod() {
// Some code...
}
type MyInterface interface {
MyMethod()
}
var x *MyType
// This will work, because x is a pointer to MyType, and MyType
// implements the MyInterface interface:
y := MyInterface(x)
y.MyMethod()
总的来说,如果T是非接口类型,则只能在T实现了接口类型时才能调用T的方法。
Copyright © 2022-2023, Koudai Team