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

golang规范中有关方法值的部分中的“非接口方法”是什么意思?

golang规范中有关方法值的部分中的“非接口方法”是什么意思?

Go
慕妹3146593 2023-07-17 14:37:27
Go 编程语言规范说:与选择器一样,使用指针对具有值接收器的非接口方法的引用将自动取消对该指针的引用:pt.Mv 相当于 (*pt).Mv。和:与方法调用一样,使用可寻址值对具有指针接收器的非接口方法的引用将自动采用该值的地址:t.Mp 相当于 (&t).Mp。那么,在给定的上下文中,什么是非接口方法呢?
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

接口方法意味着您引用(您调用)的方法是对接口值(其方法集包含该方法)的调用。同样,非接口方法意味着您引用(调用)的方法不是对接口值(而是对具体类型)的调用。


例如:


var r io.Reader = os.Stdin

r.Read(nil) // Interface method: type of r is an interface (io.Reader)


var p image.Point = image.Point{}

p.String() // Non-interface method, p is a concrete type (image.Point)

要演示自动取消引用和地址获取,请参阅以下示例:


type myint int


func (m myint) ValueInt() int { return int(m) }


func (m *myint) PtrInt() int { return int(*m) }


func main() {

    var m myint = myint(1)


    fmt.Println(m.ValueInt()) // Normal

    fmt.Println(m.PtrInt())   // (&m).PtrInt()


    var p *myint = new(myint)

    *p = myint(2)


    fmt.Println(p.ValueInt()) // (*p).ValueInt()

    fmt.Println(p.PtrInt())   // Normal

}

它输出(在Go Playground上尝试):


1

1

2

2


查看完整回答
反对 回复 2023-07-17
?
浮云间

TA贡献1829条经验 获得超4个赞

type T struct {}


func (t *T) f() {}


func main() {

  x := T{}

  x.f()

}

上面,xf是一个非接口方法。


查看完整回答
反对 回复 2023-07-17
  • 2 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

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