72 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Go Methods | |||
|  | localeTitle: 去方法 | |||
|  | ---
## 去方法
 | |||
|  | 
 | |||
|  | Golang类型可以有方法。方法是具有特殊参数的函数,即_接收器_ 。 | |||
|  | 
 | |||
|  | ```go | |||
|  | type Rectangle struct {  | |||
|  |   height, width int64  | |||
|  |  }  | |||
|  |   | |||
|  |  func (r Receiver) getArea() int64 {  | |||
|  |   return r.height * r.height  | |||
|  |  }  | |||
|  |   | |||
|  |  r := Rectangle{10, 20}  | |||
|  |  r.getArea() // 200  | |||
|  | ``` | |||
|  | 
 | |||
|  | 这里,类型`Rectangle`有一个名为`getArea`的方法,它返回矩形的区域。 这里的接收器是`r` 。 | |||
|  | 
 | |||
|  | 此代码相当于: | |||
|  | 
 | |||
|  | ```go | |||
|  | type Rectangle struct {  | |||
|  |   height, width int64  | |||
|  |  }  | |||
|  |   | |||
|  |  func getArea(r Receiver) int 64{  | |||
|  |   return r.height * r.height  | |||
|  |  }  | |||
|  |   | |||
|  |  r := Rectangle{10, 20}  | |||
|  |  getArea(r) // 200  | |||
|  | ``` | |||
|  | 
 | |||
|  | 现在getArea方法接收`r`作为参数,而不是接收器。功能相同。 | |||
|  | 
 | |||
|  | ### 指针接收器
 | |||
|  | 
 | |||
|  | 您可以将指针作为接收者传递: | |||
|  | 
 | |||
|  | ```go | |||
|  | type MyInt int64  | |||
|  |   | |||
|  |  func (m *MyInt) setToZero() {  | |||
|  |   *m = MyInt(0)  | |||
|  |  }  | |||
|  |   | |||
|  |  m := MyInt(10)  | |||
|  |  m.setToZero() // m == 0  | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 扩展方法
 | |||
|  | 
 | |||
|  | 如果你想在其他包中定义的类型上创建一个方法,例如`int`你可以使用这样的简单包装: | |||
|  | 
 | |||
|  | ```go | |||
|  | type MyInt int64  | |||
|  |   | |||
|  |  func (m MyInt) add10() int64 {  | |||
|  |   return m + 10  | |||
|  |  }  | |||
|  |   | |||
|  |  m := MyInt(10)  | |||
|  |  m.add10() // 20  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 更多信息:
 | |||
|  | 
 | |||
|  | https://tour.golang.org/methods/1 |