为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的接口实现强制

Go中的接口实现强制

Go
慕虎7371278 2022-10-10 17:50:38
我有简单的 Go 代码:type MyInterface interface {    Do()}type Doer struct{}func (d *Doer) Do() {}// Option 1var _ MyInterface = (*Doer)(nil)// Option 2var _ MyInterface = &Doer{}与选项 2 相比,使用选项 1(在任何地方都被广泛使用和建议)强制执行接口的缺点是什么?如果我们丢弃结果,实例化一个真实对象而不是指针有什么害处?我知道选项 2 可能慢了一毫秒,因为它为结构分配内存,而且 GC 可能还有一毫秒的时间来清理它,但所有这些都只在启动时发生,不会影响运行时。这些是我的正确还是我错过了什么?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

题主的分析很好。这里还有两点:


选项 1 适用于任何类型。选项 2 仅适用于具有复合文字语法的类型。


这是一个例子:


type IntDoer int


func (d *IntDoer) Do() {}


// Option 1

var _ MyInterface = (*IntDoer)(nil)


// Option 2 DOES NOT COMPILE

var _ MyInterface = &IntDoer{} 

选项 2 可能没有任何运行时损失。编译器可能会优化分配。


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号