指针与函数

现在我们要把 AbsScale 方法重写为函数。

同样,我们先试着移除掉第 16 的 *。你能看出为什么程序的行为改变了吗?要怎样做才能让该示例顺利通过编译?

(若你不确定,继续往下看。)

methods-pointers-explained.go

  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. )
  6. type Vertex struct {
  7. X, Y float64
  8. }
  9. func Abs(v Vertex) float64 {
  10. return math.Sqrt(v.X*v.X + v.Y*v.Y)
  11. }
  12. func Scale(v *Vertex, f float64) {
  13. v.X = v.X * f
  14. v.Y = v.Y * f
  15. }
  16. func main() {
  17. v := Vertex{3, 4}
  18. Scale(&v, 10)
  19. fmt.Println(Abs(v))
  20. }