参考:
http://c.biancheng.net/view/70.html
关键点
1、面向
对象
编程2、如果
想
为基本
类型,如int,string,bool等类型,改为面向对象
的编程想法
的话, 可以使用type
+接收器
方式来
实现A、使用
type
基于基本
类型 自定义新
的类型(type
的使用场景
之一)B、使用
接收器
,为自定义的新类型
,添加方法
,从而将方法
跟新类型
的实例,进行了绑定
,从而不能独自
调用该方法
了
Go语言可以对任何
类型添加
方法,给一种类型添加方法就像给结构体添加方法一样,因为结构体也是一种类型。
1、为基本类型
添加方法
在Go语言中,使用 type 关键字可以定义出新的自定义类型,之后就可以为自定义类型添加各种方法了。
我们习惯于使用面向过程
的方式
判断一个值是否为 0,例如:
if v == 0 {
// v等于0
}
如果将 v 当做整型对象,那么判断 v 值就可以增加一个 IsZero() 方法,通过这个方法就可以判断 v 值是否为 0,例如:
if v.IsZero() {
// v等于0
}
image
为基本类型添加方法的详细实现流程如下:
package main
import (
"fmt"
)
// 将int定义为MyInt类型
type MyInt int
// 为MyInt添加IsZero()方法
func (m MyInt) IsZero() bool {
return m == 0
}
// 为MyInt添加Add()方法
func (m MyInt) Add(other int) int {
return other + int(m)
}
func main() {
var b MyInt
fmt.Println(b.IsZero())
b = 1
fmt.Println(b.Add(2))
}
代码输出如下:
true
3
代码说明如下:
-
第 8 行,使用 type MyInt int 将 int 定义为自定义的 MyInt 类型。
-
第 11 行,为 MyInt 类型添加 IsZero() 方法,该方法使用了 (m MyInt) 的非指针接收器,数值类型没有必要使用指针接收器。
-
第 16 行,为 MyInt 类型添加 Add() 方法。
-
第 17 行,由于 m 的类型是 MyInt 类型,但其本身是 int 类型,因此可以将 m 从 MyInt 类型转换为 int 类型再进行计算。
-
第 24 行,调用 b 的 IsZero() 方法,由于使用非指针接收器,b的值会被复制进入 IsZero() 方法进行判断。
-
第 28 行,调用 b 的 Add() 方法,同样也是非指针接收器,结果直接通过 Add() 方法返回。
网友评论