Golang方法值与方法表达式

209 阅读1分钟
package main

import "fmt"

type Point struct {
	X, Y float64
}

func (p Point) getP(i, j int) int {
	return i + j
}

func main() {
	p := Point{1, 2}
	fun := p.getP //这个就是方法值
	fmt.Printf("%T\n", fun)
        res := fun(1, 6) //对应传参数就行,无需再传接收者
	fmt.Println(res)
        //等价于p.getP(1,6)
} 

结果:

func(int, int) int
7 

上面是方法值的情况;再来看方法表达式的情况:

package main

import "fmt"

type Point struct {
	X, Y float64
}

func (p Point) getP(i, j int) int {
	return i + j
}

func main() {
	p := Point{1, 2}
	fun := Point.getP //这个是方法表达式
	fmt.Printf("%T\n", fun)
	res := fun(p, 1, 6) //需要传接收者而且必须第一个参数作为接收者,其他参数顺序和定义的对应
	fmt.Println(res)
} 

结果:

func(main.Point, int, int) int
7