Maison > développement back-end > Golang > le corps du texte

Comment Golang définit les méthodes pour les types de structure

PHPz
Libérer: 2023-04-05 09:34:54
original
824 Les gens l'ont consulté

En langage Go, une structure est un type de données défini par l'utilisateur, qui consiste en un ensemble de champs membres de différents types. Des méthodes peuvent être définies pour effectuer des opérations sur la structure. Les types de méthodes et de fonctions en langage Go sont très similaires, mais les méthodes et fonctions sont différentes. Les méthodes sont des fonctions définies dans un type de structure. Dans cet article, nous expliquerons comment définir des méthodes pour les types struct.

1. Qu'est-ce que la méthode Golang ?

En langage Go, une méthode est une fonction qui opère sur des données de ce type. Une méthode a accès à tous les champs publics et méthodes du type auquel elle est liée. Leur syntaxe est similaire à celle des fonctions. La seule différence est que dans leurs signatures, le nom de la méthode est précédé d'un récepteur, qui est le type de structure auquel appartient cette méthode.

Par exemple :

type Rectangle struct {
    width, height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}
Copier après la connexion

Un type de structure "Rectangle" est défini ici, et une méthode "zone" est définie pour cela. Cette méthode renvoie une valeur entière en calculant l'aire du rectangle. Notez le "(r Rectangle)" dans la signature de la fonction. Il s'agit d'un récepteur qui permet d'appeler cette méthode de type "Rectangle".

Dans le code pour implémenter la méthode, nous devons définir un récepteur. Le récepteur peut être un type valeur ou un type pointeur. Les récepteurs de type valeur utilisent une copie de la valeur comme récepteur de la méthode, et les récepteurs de type pointeur utilisent un pointeur vers la valeur comme récepteur de la méthode. Pour les récepteurs de type pointeur, la méthode peut modifier la valeur elle-même ou appeler d'autres méthodes pour la modifier. Pour les récepteurs de type valeur, ces modifications sont ignorées.

2. Comment définir des méthodes pour les types ?

Ce qui suit est un exemple de programme qui montre comment définir des méthodes pour un type de structure.

package main

import "fmt"

type Rectangle struct {
    width, height int
}

func (r Rectangle) area() int {
    return r.width * r.height
}

func (r Rectangle) perimeter() int {
    return 2 * (r.width + r.height)
}

func main() {
    r := Rectangle{10, 5}
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
}
Copier après la connexion

Dans ce programme, nous définissons un type de structure appelé "Rectangle". Nous définissons deux méthodes pour ce type : "surface" et "périmètre".

La méthode "area" renvoie l'aire du rectangle, et la méthode "perimeter" renvoie le périmètre du rectangle.

Dans la fonction "main", nous créons une instance de type Rectangle nommée "r". Nous obtenons l'aire et le périmètre du rectangle en appelant les méthodes "r.area()" et "r.perimeter()" et imprimons les valeurs sur la console.

3. Utiliser des récepteurs de type pointeur dans les types

Supposons maintenant que nous souhaitions modifier les propriétés du type Rectangle. Nous devons utiliser des types pointeurs dans le récepteur, pas des types valeur. De cette façon, nous pouvons modifier les champs de l'instance.

type Rectangle struct {
    width, height int
}

func (r *Rectangle) area() int {
    return r.width * r.height
}

func (r *Rectangle) perimeter() int {
    return 2 * (r.width + r.height)
}

func (r *Rectangle) resize(newWidth int, newHeight int) {
    r.width = newWidth
    r.height = newHeight
}

func main() {
    r := &Rectangle{10, 5}
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
    r.resize(12, 6)
    fmt.Println("Area: ", r.area())
    fmt.Println("Perimeter: ", r.perimeter())
}
Copier après la connexion

Dans le code ci-dessus, nous avons le type de pointeur "*Rectangle" comme récepteur. Cela signifie que nous pouvons modifier la valeur du type dans l’implémentation de la méthode. Nous définissons une nouvelle méthode "resize" pour transmettre les valeurs des nouvelles largeur et hauteur et les affecter aux propriétés width et height du Rectangle.

Dans la fonction principale, nous créons un pointeur vers l'instance Rectangle, "r". Nous appelons ensuite la méthode que nous avons définie précédemment et transmettons les nouvelles valeurs de hauteur et de largeur à la méthode "resize". Enfin, nous imprimons la nouvelle zone et le périmètre du rectangle sur la console.

4. Résumé

En langage Go, les méthodes sont des fonctions définies dans des types de structure. Ces méthodes ont accès à tous les champs publics et méthodes du type auquel elles sont liées. Dans le code pour implémenter la méthode, nous devons définir un récepteur. Le récepteur peut être un type valeur ou un type pointeur. Les récepteurs de type valeur utilisent une copie de la valeur comme récepteur de la méthode, et les récepteurs de type pointeur utilisent un pointeur vers la valeur comme récepteur de la méthode. Pour les récepteurs de type pointeur, la méthode peut modifier la valeur elle-même ou appeler d'autres méthodes pour la modifier. Pour les récepteurs de type valeur, ces modifications sont ignorées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!