Table des matières
Définissez la structure et la méthode
Utilisez des récepteurs de pointeur lorsque vous devez modifier l'instance
Méthodes d'appel sur les structures intégrées
Gardez les choses simples: pas besoin de Getters ou de Setters
Maison développement back-end Golang Comment appeler une méthode sur une instance de structure en Go?

Comment appeler une méthode sur une instance de structure en Go?

Jun 24, 2025 pm 03:17 PM
go Méthode structurelle

Dans le langage GO, l'appel d'une méthode de structure nécessite d'abord de définir la structure et la méthode qui lie le récepteur et l'accès à l'aide d'un numéro de point. Après avoir défini le rectangle de structure, la méthode peut être déclarée via le récepteur de valeur ou le récepteur de pointeur; 1. Utilisez le récepteur de valeur tel que Func (R rectangle) zone () int, et il est appelé directement via rect.area (); 2. Si vous avez besoin de modifier la structure, utilisez le récepteur de pointeur tel que SetWidth (R * rectangle) de Func (R * R * 3. Lors de l'intégration de la structure, la méthode de structure intégrée sera promue et peut être appelée directement par la structure extérieure; 4. GO n'a pas besoin de forcer Getter / Setter, et les champs sont accessibles directement à moins que le contrôle logique ne soit requis. Ces mécanismes rendent les appels de méthode concis et flexibles.

Comment appeler une méthode sur une instance de structure en Go?

Dans Go, appeler une méthode sur une instance de structure est simple - vous utilisez la notation de points, tout comme l'accès aux champs. La clé est de comprendre comment les méthodes sont définies avec des récepteurs liés à des types spécifiques.

Définissez la structure et la méthode

Définissez d'abord un type de structure, puis déclarez une méthode avec un récepteur de ce type:

 type rectangle struct {
    Largeur, hauteur int
}

func (r rectangle) Area () int {
    retour R.Width * R.Height
}

Ici, Area est une méthode sur Rectangle . La partie (r Rectangle) signifie qu'il s'agit d'un récepteur de valeur - la méthode obtient une copie de l'instance Rectangle sur laquelle elle est appelée.

Pour l'appeler:

 rect: = rectangle {largeur: 3, hauteur: 4}
fmt.println (rect.area ()) // sortie: 12

Cela fonctionne car GO gère automatiquement le pointeur par rapport aux récepteurs de valeur pour vous - plus à ce sujet ci-dessous.


Utilisez des récepteurs de pointeur lorsque vous devez modifier l'instance

Si votre méthode doit modifier la structure, utilisez un récepteur de pointeur:

 func (r * rectangle) setWidth (Newwidth int) {
    R.Width = Newwidth
}

Ensuite, appelez-le comme ceci:

 rect: = & rectangle {largeur: 3, hauteur: 4}
rect.setwidth (5)
Fmt.println (rect.width) // Sortie: 5

Quelques choses à noter:

  • Si vous avez un pointeur vers une structure, Go vous permet d'appeler à la fois la valeur et les méthodes de pointeur.
  • Si vous avez une valeur, vous ne pouvez appeler les méthodes de valeur que si aller prend automatiquement son adresse.

Donc, si vous écrivez:

 rectval: = rectangle {3, 4}
rectval.setwidth (5) // fonctionne toujours!

GO convertira automatiquement rectVal en un pointeur lors de l'appel SetWidth , vous n'avez donc pas à vous soucier des types de correspondance dans la plupart des cas.


Méthodes d'appel sur les structures intégrées

GO prend en charge les structures d'intégration à l'intérieur d'autres structures, et leurs méthodes sont promues:

 Tapez une structure intérieure {
    Valeur int
}

func (i inner) printValue () {
    fmt.println (i.value)
}

Tapez la structure externe {
    Intérieur // intégré
}

Vous pouvez maintenant appeler la méthode directement sur la structure extérieure:

 o: = exter {inner {valeur: 10}}
O.printValue () // Sortie: 10

Cela évite d'avoir à écrire o.Inner.PrintValue() à chaque fois.


Gardez les choses simples: pas besoin de Getters ou de Setters

Contrairement à certaines langues, GO ne nécessite pas de getters et de setters. Étant donné que tous les champs sont publics s'ils sont capitalisés, vous pouvez y accéder directement, sauf si vous avez besoin de logique autour de la définition d'une valeur.

Par exemple:

 // Attribuez simplement directement
rect.width = 6

// n'utilise qu'une méthode si la validation est nécessaire
func (r * rectangle) setWidthSafe (w int) {
    Si w <0 {
        panique ("la largeur doit être non négative")
    }
    R.Width = W
}

Appeler ceci n'est pas différent de toute autre méthode:

 rect: = & rectangle {}
rect.setwidthsafe (5)

Appeler une méthode sur une structure en Go est simple une fois que vous comprenez les récepteurs. Que vous travailliez avec des récepteurs de valeur ou de pointeur, des types intégrés ou un accès direct sur le terrain, GO vous donne une flexibilité sans passe-partout supplémentaire.

Fondamentalement, c'est tout.

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!

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1543
276
Comment fermer gracieusement un service GO? Comment fermer gracieusement un service GO? Aug 05, 2025 pm 08:21 PM

Usesignal.notify () TolistenForsigint / SigterandTriggersHutdown; 2.RunthehttpServerinagoroutineandblockuntilasignalisreceived; 3.CallServer.Shutdown () avec un aontextTimeoutTostopaccepingEptureNewrequestSallowine-FLIMESTOSTOCLEM

Comment obtenir l'heure actuelle en Go Comment obtenir l'heure actuelle en Go Aug 06, 2025 am 11:28 AM

UseTime.now () togetTheCurrentLocaltimeAsatime.TimeObject; 2.FormatTheTimeusingtheformatmethodwithlayoutslik "2006-01-0215: 04: 05"; 3.GetUtCtimeByCallingUtc () onTheResultime.now (); 4.xtractconntslikeliseyyar, mois, DayUsiTheThoDs

Comment créer et utiliser des types d'erreur personnalisés dans Go Comment créer et utiliser des types d'erreur personnalisés dans Go Aug 11, 2025 pm 11:08 PM

Dans GO, la création et l'utilisation de types d'erreurs personnalisés peuvent améliorer l'expressivité et la débogabilité de la gestion des erreurs. La réponse est de créer une erreur personnalisée en définissant une structure qui implémente la méthode Error (). Par exemple, ValidationError contient des champs de champ et de messages et renvoie les informations d'erreur formatées. L'erreur peut ensuite être renvoyée dans la fonction, détectant des types d'erreur spécifiques via des assertions ou des erreurs de type. Vous pouvez également ajouter des méthodes comportementales telles que les erreurs ISCRITIQUES à personnalisées, qui conviennent aux scénarios qui nécessitent des données structurées, un traitement différencié, une exportation de bibliothèque ou une intégration API. Dans des cas simples, des erreurs.

Comment transformez-vous une application GO? Comment transformez-vous une application GO? Aug 06, 2025 am 05:52 AM

Cross-compilingaGoapplicationisstraightforwardusingbuilt-insupportviaGOOSandGOARCH.1.SetGOOSforthetargetoperatingsystem(e.g.,linux,windows,darwin).2.SetGOARCHforthetargetarchitecture(e.g.,amd64,arm64).3.Rungobuildwiththesevariables,suchasGOOS=linuxGO

Comment utiliser le chemin / le fil de file pour la manipulation de chemin multiplateforme en go Comment utiliser le chemin / le fil de file pour la manipulation de chemin multiplateforme en go Aug 08, 2025 pm 05:29 PM

UseFilepath.join () tosafelyconstructPathswithcorrectos-spécifications ..2.UseFilePath.clean () toreMoverEdundantelements like ".." et ".". 3.UseFilepath.split () toseParateDirectoryandFileComponents.4.UseFilePath.Dir (), FilePath.base (), an

Comment gérer les paniques et récupérer Comment gérer les paniques et récupérer Aug 06, 2025 pm 02:08 PM

La fonction de récupération doit être appelée en report pour capturer la panique; 2. Utilisez la récupération dans des programmes de longue durée tels que Goroutine ou Server pour empêcher l'ensemble du programme de se bloquer; 3. La récupération ne doit pas être abusée, uniquement utilisée lorsqu'elle est manipulée, pour éviter de remplacer la gestion des erreurs normale; 4. Les meilleures pratiques incluent l'enregistrement des informations de panique, en utilisant Debug.stack () pour obtenir des traces de pile et récupérer à un niveau approprié. La récupération n'est valable que dans le report et doit être utilisée pour le débogage avec des journaux. Les bogues potentiels ne peuvent pas être ignorés. En fin de compte, le code doit être conçu en renvoyant l'erreur plutôt qu'en panique.

Comment gérez-vous les signaux dans une application Go? Comment gérez-vous les signaux dans une application Go? Aug 11, 2025 pm 08:01 PM

La bonne façon de traiter les signaux dans les applications GO consiste à utiliser le package OS / Signal pour surveiller le signal et effectuer un arrêt élégant. 1. Utilisez Signal.Notify pour envoyer SIGINT, SIGTERM et d'autres signaux au canal; 2. Exécutez le service principal en goroutine et bloquez le signal d'attente; 3. Après avoir reçu le signal, effectuez un arrêt élégant avec le délai d'expiration via Context.withTimeout; 4. Nettoyer des ressources telles que la fermeture des connexions de la base de données et l'arrêt de la goroutine d'arrière-plan; 5. Utilisez le signal.Resine pour restaurer le comportement du signal par défaut lorsque cela est nécessaire pour vous assurer que le programme peut être terminé de manière fiable en Kubernetes et dans d'autres environnements.

Comparaison des performances: Java Vs. GO pour les services backend Comparaison des performances: Java Vs. GO pour les services backend Aug 14, 2025 pm 03:32 PM

GOTYPICAL OFFERSBETTERRUNTIMEPERFORMANCE AVEC LA MAINTRÉE DE PUTHROUGHTANDLOWERLATENCE, ENTERTFORI / O-HEAVYSERVICES, DUETOITSLIGHT LONDEGOROUTINESANDERFICENTSCHEDULL

See all articles