71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Go Methods | ||
|  | --- | ||
|  | ## Go Methods
 | ||
|  | 
 | ||
|  | Golang types can have methods. A method is a function with a special argument, the _receiver_. | ||
|  | 
 | ||
|  | ```go | ||
|  | type Rectangle struct { | ||
|  |   height, width int64 | ||
|  | } | ||
|  | 
 | ||
|  | func (r Receiver) getArea() int64 { | ||
|  |   return r.height * r.height | ||
|  | } | ||
|  | 
 | ||
|  | r := Rectangle{10, 20} | ||
|  | r.getArea() // 200 | ||
|  | ``` | ||
|  | 
 | ||
|  | Here, type `Rectangle` has got a method called `getArea` that returns the area of the rectangle. | ||
|  | The receiver here is `r`. | ||
|  | 
 | ||
|  | This code is equivalent to: | ||
|  | ```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 | ||
|  | ``` | ||
|  | Now the getArea method receives `r` as an argument, instead of a receiver. The functionality is equivalent. | ||
|  | 
 | ||
|  | ### Pointer receiver
 | ||
|  | 
 | ||
|  | You can pass a pointer as a receiver: | ||
|  | ```go | ||
|  | type MyInt int64 | ||
|  | 
 | ||
|  | func (m *MyInt) setToZero() { | ||
|  |   *m = MyInt(0) | ||
|  | } | ||
|  | 
 | ||
|  | m := MyInt(10) | ||
|  | m.setToZero() // m == 0 | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Extension methods
 | ||
|  | 
 | ||
|  | If you want to create a method on a type defined in other package, e.g. `int` you can use a simple wrapper like this: | ||
|  | 
 | ||
|  | ```go | ||
|  | type MyInt int64 | ||
|  | 
 | ||
|  | func (m MyInt) add10() int64 { | ||
|  |   return m + 10 | ||
|  | } | ||
|  | 
 | ||
|  | m := MyInt(10) | ||
|  | m.add10() // 20 | ||
|  | ``` | ||
|  | 
 | ||
|  | #### More Information:
 | ||
|  | <!-- Please add any articles you think might be helpful to read before writing the article --> | ||
|  | https://tour.golang.org/methods/1 |