Methods
Syntax#
- func (t T) exampleOne(i int) (n int) { return i } // this function will receive copy of struct
- func (t *T) exampleTwo(i int) (n int) { return i }
// this method will receive pointer to struct and will be able to modify it
Basic methods
Methods in Go are just like functions, except they have receiver.
Usually receiver is some kind of struct or type.
package main
import (
"fmt"
)
type Employee struct {
Name string
Age int
Rank int
}
func (empl *Employee) Promote() {
empl.Rank++
}
func main() {
Bob := new(Employee)
Bob.Rank = 1
fmt.Println("Bobs rank now is: ", Bob.Rank)
fmt.Println("Lets promote Bob!")
Bob.Promote()
fmt.Println("Now Bobs rank is: ", Bob.Rank)
}
Output:
Bobs rank now is: 1
Lets promote Bob!
Now Bobs rank is: 2
Chaining methods
With methods in golang you can do method “chaining” passing pointer to method and returning pointer to the same struct like this:
package main
import (
"fmt"
)
type Employee struct {
Name string
Age int
Rank int
}
func (empl *Employee) Promote() *Employee {
fmt.Printf("Promoting %s\n", empl.Name)
empl.Rank++
return empl
}
func (empl *Employee) SetName(name string) *Employee {
fmt.Printf("Set name of new Employee to %s\n", name)
empl.Name = name
return empl
}
func main() {
worker := new(Employee)
worker.Rank = 1
worker.SetName("Bob").Promote()
fmt.Printf("Here we have %s with rank %d\n", worker.Name, worker.Rank)
}
Output:
Set name of new Employee to Bob
Promoting Bob
Here we have Bob with rank 2
Increment-Decrement operators as arguments in Methods
Though Go supports ++ and — operators and the behaviour is found to be almost similar to c/c++, variables with such operators cannot be passed as argument to function.
package main
import (
"fmt"
)
func abcd(a int, b int) {
fmt.Println(a," ",b)
}
func main() {
a:=5
abcd(a++,++a)
}
Output: syntax error: unexpected ++, expecting comma or )