add ch10.6

This commit is contained in:
leisore
2015-07-10 23:17:04 +08:00
parent 43cef172ef
commit fcd30058a8

27
eBook/10.6.md Normal file
View File

@@ -0,0 +1,27 @@
# 10.6 方法
## 10.6.1 方法是什么
在Go中结构体就像是类的一种简化形式那么OO程序员可能会问类的方法在哪里呢在Go中有一个概念它和方法有着同样的名字并且大体上意思相同Go方法是作用在接受者receiver上的一个函数接受者是某种类型的变量。因此方法是一种特殊类型的函数。
接受者类型可以是几乎任何类型不仅仅是结构体类型任何类型都可以有方法甚至可以是函数类型可以是int、bool、string或数组的alias类型。但是接受者不能是一个接口类型参考 第11章因为接口是一个抽象定义但是方法却是具体实现如果这样做会引发一个编译错误*invalid receiver type…*
最后接受者不能是一个指针类型,但是它可以是任何其他允许类型的指针。
一个类型加上它的方法等价于OO中的一个类。一个重要的区别是在Go中类型的代码和绑定在它上面的方法的代码可以不放置在一起它们可以存在在不同的源文件唯一的要求是它们必须是同一个包的。
类型T或*T上的所有方法的集合叫做类型T或*T的方法集。
因为方法是函数所以同样的不允许方法重载即对于一个类型只能有一个给定名称的方法。但是如果基于接受者类型是有重载的具有同样名字的方法可以在2个或多个不同的接受者类型上存在比如在同一个包里这么做是允许的
```go
func (a *denseMatrix) Add(b Matrix) Matrix
func (a *sparseMatrix) Add(b Matrix) Matrix
```
## 链接
- [目录](directory.md)
- 上一节:[10.5 匿名字段和内嵌结构体](10.5.md)
- 下一节:[10.7 TODO](10.7.md)