微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go编程语言中的“方法需要指针接收器”

如何解决Go编程语言中的“方法需要指针接收器”

我认为这里有些混乱。inc是类型的方法*entity,而不是类型的方法entity(虽然您可以直接在指针上调用值的方法;通常不能直接在值上调用指针的方法)。您可能会感到困惑的是为什么您可以打电话e.inc()而不是去打电话(&e).inc()。这是一个鲜为人知的特殊情况,在语言规范的“调用”部分的底部有说明,即如果x是可寻址的,并且&x方法集包含mx.m()则为的简写(&x).m()。这适用于这种情况,因为e是变量,因此是可寻址的;但是其他表达式可能无法寻址。我建议您不要使用此快捷方式,因为它会引起混乱;它使您认为它e符合interfaceinter,而事实并非如此。

解决方法

我刚刚看到了Go编程语言的演示,并认为我会尝试写几行。一切正常,直到在这种情况下我尝试使用接口为止。我该如何解决?

package main

import "fmt"

type entity float32

func (e *entity) inc() {
    *e++
}

type incer interface {
    inc()
}

func doSomething(i incer) {
    i.inc()
}

func main() {
    fmt.Println("Hello,世界")

    var e entity = 3
    e.inc()
    doSomething(e)
    fmt.Println(e)
}

我收到编译器错误:

prog.go:24: cannot use e (type entity) as type incer in function argument:
entity does not implement incer (inc method requires pointer receiver)

我想使用一个指针,以便inc()会影响函数外的实体。我应该使用什么语法?

/瑞奇

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。