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

在结构“函数”中使用指针与复制

在结构“函数”中使用指针与复制

Go
海绵宝宝撒 2021-07-28 13:56:19
我是 Go 的新手,在编写结构“函数”时,我真的无法决定何时使用指针还是副本(这是正确的术语吗?)type Blah struct {    c complex128    s string    f float64}func (b * Blah) doPtr() {    fmt.Println(b.c, b.s, b.f);}func (b Blah) doCopy() {    fmt.Println(b.c, b.s, b.f);}现在,我的 C++ 背景告诉我doPtr在速度和内存方面都更有效率,但是doCopy除非您修改对象,否则很多示例都会使用,所以我错过了什么吗?
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

...另一个原因是这意味着该方法不需要获取指向结构的指针。这非常重要,因为它与 Go 类型系统的关系。如果通过接口调用方法,则只有当接口变量包含指针时,才能调用接受指针的方法。

例如,您可以定义一个定义 Log() 方法的接口并创建一个这种类型的变量。然后,您可以将 Logger 结构的一个实例分配给该变量。您还可以将指向 Logger 结构实例的指针分配给该变量。两者都可以工作,因为 Log() 方法可以从结构的实例和指向实例的指针中调用。如果该方法接受一个指针参数,那么您只能在指针上调用它。因此,Go 中的好风格是只要求方法在修改结构时采用指针,或者如果结构太大以至于在每次方法调用时都无法复制它......


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信