Go语言可以对任何类型添加方法,给一种类型添加方法就像给结构体添加方法一样,因为结构体也是一种类型。
为基本类型添加方法
在Go语言中,使用type关键字可以定义出新的自定义类型,之后就可以为自定义类型添加各种方法了。我们习惯于使用面向过程的方式判断一个值是否为0,例如:
ifv==0{//v等于0}
如果将v当做整型对象,那么判断v值就可以增加一个IsZero()方法,通过这个方法就可以判断v值是否为0,例如:
ifv.IsZero(){//v等于0}
为基本类型添加方法的详细实现流程如下:
packagemain
import("fmt")
//将int定义为MyInt类型typeMyIntint
//为MyInt添加IsZero()方法func(mMyInt)IsZero()bool{returnm==0}
//为MyInt添加Add()方法func(mMyInt)Add(otherint)int{returnother+int(m)}
funcmain(){
varbMyInt
fmt.Println(b.IsZero())
b=1
fmt.Println(b.Add(2))}
代码输出如下:
true
3
代码说明如下:
第8行,使用typeMyIntint将int定义为自定义的MyInt类型。
第11行,为MyInt类型添加IsZero()方法,该方法使用了(mMyInt)的非指针接收器,数值类型没有必要使用指针接收器。
第16行,为MyInt类型添加Add()方法。
第17行,由于m的类型是MyInt类型,但其本身是int类型,因此可以将m从MyInt类型转换为int类型再进行计算。
第24行,调用b的IsZero()方法,由于使用非指针接收器,b的值会被复制进入IsZero()方法进行判断。
第28行,调用b的Add()方法,同样也是非指针接收器,结果直接通过Add()方法返回。