对象:GDB 接口内部结构

本文探讨了Go语言中GDB接口的内部结构,包括接口如何存储类型和方法,以及如何实现动态绑定。通过分析接口的元数据、方法表和实际类型的方法地址,揭示了接口对象内部存储的内容,并解释了接口调用的动态过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5-12 gdb接口内部结构

type N int

func (N) A() { println("*N.A") }
func (*N) B() { println("*N.B") }
func (*N) C() { println("*N.C") } // *N = N + *N  = A+B+C   // N = A

type Ner interface {
    A()
    B()
}

func main() {
    var n N = 0x100
    var x Ner = &n // main.(*N)

    x.A()
    x.B()
}

定义类型N,N有三个方法,其中一个属于N的,两个属于N指针的,定义一个接口Ner,要求必须有两个方法A和B。因为Go语言并不需要明确的在类型上声明实现了某个接口,但是Java或者C#需要明确声明。

Go语言就是当方法集包含某个接口的全部声明就表示你实现了这个接口,我们通常把类型Ner叫做鸭子类型(Duck Type),就是你长的像这只鸭子我们就可以把你当做鸭子。类型N有A和B,那么就认为它实现了Ner接口。

main方法中首先创建了N的对象实例,接下来把这个实例赋值给接口对象,这地方为什么不直接用N而是用N指针呢?因为类型N包含A,N指针包含A、B、C,所以只有N指针实现了Ner接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值