====== Structure ====== Une structure est une collection de types par exemple type personne struct { nom string age int } une variable de type ''personne'' contiendra un attribut ''nom'' et un attribut ''age'' // création d'une personne p := personne{nom:"Robert", age:70} // lecture d'un attribut a := p.age // modification p.age = 47 ===== Méthode ===== Comme on définit une fonction dans une classe, on va définir une fonction liée à une structure. Prenons l'exemple Python d'une classe ''%%Rectangle%%'' avec sa méthode ''%%perimetre%%'' class Rectangle: def __init__(self, largeur, longueur): self.largeur = largeur self.longueur = longueur def perimetre(self): return 2*(self.longueur + self.largeur) # exemple d'utilisation r = Rectangle(45, 170) perim = r.perimetre() Notez que la méthode ''%%perimetre%%'' a besoin de pouvoir atteindre l'objet ''%%Rectangle%%'' sur lequel elle s'applique et que cela se fait, dans la définition en précisant ''%%self%%'' comme argument de la fonction, et à l'exécution en écrivant ''%%r.%%'' devant l'appel ''%%perimetre()%%''. Voici comme cela se transforme en Go type Rectangle struct { largeur int longueur int } func (self rect) perimetre() int { return 2*(self.longueur +self.largeur) } // exemple d'utilisation r := Rectangle{largeur:45, longueur:170} perim := r.perimetre() * ''%%Rectangle%%'' n'est pas une classe et n'a pas de constructeur comme le ''%%__init__%%'' Python. Tout ce que l'on peut faire, c'est créer la structure en précisant les attributs. * La définition de la méthode ''%%perimetre%%'' n'est pas placée à l'intérieur du ''%%struct%%''. * Remarquez enfin comment le ''%%self%%'' (//qui n'est pas un mot-clé réservé, on pourrait écrire un autre nom à la place de « self »//) est placé dans la définition de la fonction ''%%perimetre%%''.