(1)函数拥有一个指针参数的时候需要传一个指针 (只能选指针作为实参)
(2)方法拥有一个指针接收器的时候需要一个值或者一个指针作为接收器 (指针和值二者选一作为实参)
package main
import "fmt"
type Vertex struct {
X, Y float64
}
func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}
func ScaleFunc(v *Vertex, f float64) {
v.X = v.X * f
v.Y = v.Y * f
}
func main() {
v := Vertex{3, 4}
v.Scale(10)
ScaleFunc(&v, 2)
p := &Vertex{4, 3}
p.Scale(3)
ScaleFunc(p, 2)
fmt.Println(v, p)
}
(1)函数设置一个值作为参数必须接收相同类型的值
(2)方法有一个值接收器,可以接收值或者指针
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X + v.Y)
}
func AbsFunc(v Vertex) float64 {
return math.Sqrt(v.X + v.Y)
}
func main() {
v := Vertex{10, 20}
fmt.Println(v.Abs())
fmt.Println(AbsFunc(v))
p := &Vertex{10, 20}
fmt.Println(p.Abs())
fmt.Println(AbsFunc(*p))
}