如果 func 要求入参为接口数组:

func F(arr []IShape)

然后结构体X指针实现了这个接口:

var _ IShape = &X{}

这时候这么写是会报错的:

1
2
arr := []*X{}
F(arr)

说明入参要求是接口数组,就一定要传入接口数组。
接口的实现的数组 ≠ 接口数组

正确的写法:

1
2
3
arr := []IShape{}
arr = append(arr, &X{})
F(arr)