何谓';非接口方法&x27;在golang规范中关于方法值的章节中?

何谓';非接口方法&x27;在golang规范中关于方法值的章节中?,go,methods,interface,specifications,Go,Methods,Interface,Specifications,: 与选择器一样,对使用指针的值接收器的非接口方法的引用将自动取消对该指针的引用:pt.Mv相当于(*pt.Mv) 以及: 与方法调用一样,使用可寻址值的指针接收器对非接口方法的引用将自动获取该值的地址:t.Mp相当于(&t).Mp 那么,在给定的上下文中,什么是非接口方法?接口方法意味着您引用(调用)的方法是对接口值(其方法集包含该方法)的调用。类似地,非接口方法意味着您引用(您调用)的方法不是对接口值的调用(而是对具体类型的调用) 例如: var r io.Reader = os.Stdin

:

与选择器一样,对使用指针的值接收器的非接口方法的引用将自动取消对该指针的引用:pt.Mv相当于(*pt.Mv)

以及:

与方法调用一样,使用可寻址值的指针接收器对非接口方法的引用将自动获取该值的地址:t.Mp相当于(&t).Mp


那么,在给定的上下文中,什么是非接口方法?

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

例如:

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
}
它输出(在屏幕上试用):

如上所述,x.f是一种非接口方法

1
1
2
2
type T struct {}

func (t *T) f() {}

func main() {
  x := T{}
  x.f()
}