type A struct {
r int
}
func (a A) FuncA() {}
type B A
type C *A
func main() {
var b B
var a A
var c C
a.FuncA() //legal
b.FuncA() //illegal
c.FuncA() //illegal
(*c).FuncA() //legal
fmt.Println(b.r) //legal
fmt.Println(c.r) //legal
}
为什么b.FuncA() 和 c.FuncA() 不合法,而(*c).FuncA(),b.r和c.r合法呢?
有疑问加站长微信联系(非本文作者)

我个人理解,仅供参考:
b = *c
,ide 提示 type A 类型无法赋值给 type B,所以此时*c
可以调用方法,至于为什么 *c 是 type A 类型,这点我也不太清楚。底层类型和类型相同是两码事,1.18版本之后 带上~符号后,在接口中,实例化的时候,才能出现“底层类型相同所以类型相同“的情况。