Go
Les méthodes
Recherche…
Syntaxe
- func (t T) exampleOne (i int) (n int) {return i} // cette fonction recevra une copie de struct
- func (t * T) exampleTwo (i int) (n int) {return i} // cette méthode recevra le pointeur sur struct et pourra le modifier
Méthodes de base
Les méthodes dans Go sont comme les fonctions, sauf qu'elles ont un récepteur .
Habituellement, le récepteur est une sorte de structure ou de 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)
}
Sortie:
Bobs rank now is: 1
Lets promote Bob!
Now Bobs rank is: 2
Méthodes de chaînage
Avec les méthodes de golang, vous pouvez utiliser la méthode "chaînant" en passant le pointeur à la méthode et en renvoyant le pointeur sur la même structure comme ceci:
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)
}
Sortie:
Set name of new Employee to Bob
Promoting Bob
Here we have Bob with rank 2
Incrémenter-décrémenter les opérateurs comme arguments dans les méthodes
Bien que Go prenne en charge les opérateurs ++ et - et que le comportement soit presque similaire à c / c ++, les variables avec de tels opérateurs ne peuvent pas être passées en argument pour fonctionner.
package main
import (
"fmt"
)
func abcd(a int, b int) {
fmt.Println(a," ",b)
}
func main() {
a:=5
abcd(a++,++a)
}
Sortie: erreur de syntaxe: inattendu ++, attend une virgule ou)
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow