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