You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go中接口绑定值接收者方法时为何可返回结构体指针实现接口?

你的原有想法是错误的,Go语言的方法集规则允许返回结构体指针,不需要将draw()改为指针接收者实现。

核心原因:Go语言的方法集自动适配规则

Go在判断类型是否实现接口时,遵循以下方法集规则:

  • 对于自定义类型T,它的方法集包含所有接收者为T的方法
  • 对于指针类型*T,它的方法集同时包含接收者为T和*T的所有方法

你当前的代码中,Rectangle等结构体都实现了值接收者的draw()方法,那么对应的指针类型*Rectangle、*Square、*Circle自然也满足Shape接口的要求,因此CreateShape方法直接返回结构体指针是完全合法的。

补充反向场景说明

如果你将draw()改为指针接收者实现,那么只有对应结构体的指针类型才满足Shape接口,结构体值类型不再满足接口要求,此时CreateShape方法只能返回结构体指针,不能返回结构体值。

额外注意

你贴出的代码中存在一处拼写错误:Square类型的draw方法接收者写成了Squre,会导致编译不通过,实际使用时需要修正。


内容的提问来源于stack exchange,提问作者s666

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:57:03