Welcome, After a long time, I will share next article about advance methods that can increase problem efficiency, very useful . Let's begin this.
Method Value :
Method Value are special type of methods. These methods don't receive receiver parameter. That why they are special methods. These are generally use in package level api or client defined behaviour. Let study example case i
package main
import (
"fmt"
)
type Op struct{
x int
}
func(o *Op)Add(y int)int{
return o.x +y
}
func main() {
// case i
op := Op{4} // method value
res := op.Add
fmt.Println(res(4))
//case ii
oprend := &Op{5} // method expression
add := (*oprend).Add
fmt.Println(add(4))
}
Method Expression:
Method Expression are similar like to method values, but there is one great difference and is methods take parameter as a receiver, just like old example but you can bind with more than one methods. In method expression (*T).f is an unusual way to write a selector syntax . The above example( case ii) show both method expression but in next code you deeply understand.
type Point struct{ X, Y float64 }
func (p Point) Add(q Point) Point { return Point{p.X + q.X, p.Y + q.Y} }
func (p Point) Sub(q Point) Point { return Point{p.X - q.X, p.Y - q.Y} }
type Path []Point
func (path Path) TranslateBy(offset Point, add bool) {
var op func(p, q Point) Point
if add { op = Point.Add }
else { op = Point.Sub }
for i := range path {
// Call either
path[i].Add(offset)
//or
path[i].Sub(offset). path[i] = op(path[i], offset)
}
}
I hope you enjoy, have a great day.
Comments
Post a Comment