方法(续)

你也可以为非结构体类型声明方法。

在此例中,我们看到了一个带 Abs 方法的数值类型 MyFloat

你只能为在同一包内定义的类型的接收者声明方法,而不能为其它包内定义的类型(包括 int 之类的内建类型)的接收者声明方法。

(译注:就是接收者的类型定义和方法声明必须在同一包内;不能为内建类型声明方法。)

methods-continued.go

  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. )
  6. type MyFloat float64
  7. func (f MyFloat) Abs() float64 {
  8. if f < 0 {
  9. return float64(-f)
  10. }
  11. return float64(f)
  12. }
  13. func main() {
  14. f := MyFloat(-math.Sqrt2)
  15. fmt.Println(f.Abs())
  16. }