方法(续)
方法(续)
你也可以为非结构体类型声明方法。
在此例中,我们看到了一个带 Abs 方法的数值类型 MyFloat 。
你只能为在同一包内定义的类型的接收者声明方法,而不能为其它包内定义的类型(包括 int 之类的内建类型)的接收者声明方法。
(译注: 就是接收者的类型定义和方法声明必须在同一包内; 不能为内建类型声明方法(int float之类的) 。 )
也 也 也就是说, 类型接收者的类型,只能是使用同一个包下定义的结构体.
package main import ( "fmt" "math" ) type MyFloat float64 //只能使用同一个包定义的类型(也就是同一个目录下的定义的类型),不能使用内建声明方法(int float之类的) func (f MyFloat) Abs() float64 { if f < 0 { return float64(-f) } return float64(f) } func main() { f := MyFloat(-math.Sqrt2) fmt.Println(f.Abs()) }
x
1 package
main 2 3 import ( 4
"fmt" 5
"math" 6 ) 7 8 type
MyFloat
float64
//只能使用同一个包定义的类型(也就是同一个目录下的定义的类型),不能使用内建声明方法(int float之类的) 9 10 func ( f
MyFloat ) Abs () float64 { 11
if
f
<
0 { 12
return
float64 (
f ) 13
} 14
return
float64 ( f ) 15 } 16 17 func
main () { 18
f :
MyFloat (
math . Sqrt2 ) 19
fmt . Println ( f . Abs ()) 20 } 21