小李同学 keep digging deeper
Golang

go语言中的interface为什么建议用指针来实现

1 阅读 — 字

interface 定义一组方法的契约,不关心实现细节。实现它时可以用值类型(struct 本身),也可以用指针类型。一般建议用指针,理由有三个。

方法集一致

Go 里值类型和指针类型的方法集不一样:值类型只有值接收器的方法,指针类型同时拥有指针接收器和值接收器的方法。

后果是,如果用值类型实现接口,只有把对象按值传递时才能调到那些方法,按指针传就不满足了。用指针类型实现接口,两种传递方式都能用,代码不必因为传参形式不同而改。

避免拷贝

用值类型实现接口时,每次调方法都会拷一份值。对象大一点,这个开销就不小了。指针只传地址,没有这个成本。

能改对象状态

指针改的是原对象,值类型改的是副本。如果实现接口的目的就是改状态,只能用指针。

什么时候不用指针

简单的小对象用值类型也没问题:既没有拷贝的性能顾虑,也不涉及修改状态。选指针主要是为了方法集一致和性能,不是一条绝对规则。

本文作者 小李同学,转载请注明出处。

评论

还没有人留言。

写一条

提交后会先进站主的待审列表,通过之后才公开。

搜索文章

输入关键词搜索文章。