方法(续)

程序员成长之旅 · 程序员成长之旅/Go语言学习/笔记 · 334 字

方法(续)

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

在此例中,我们看到了一个带 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