Maison développement back-end Golang ## Pourquoi une valeur peut-elle invoquer une méthode pointeur dans Go ?

## Pourquoi une valeur peut-elle invoquer une méthode pointeur dans Go ?

Oct 25, 2024 pm 11:58 PM

## Why Can a Value Invoke a Pointer Method in Go?

Syntaxe d'appel des méthodes de récepteur Go : une plongée plus approfondie

Dans le guide "Effective Go", il est indiqué que les méthodes de pointeur ne peuvent être invoquées sur des pointeurs, tandis que les méthodes de valeur peuvent être invoquées sur des pointeurs ou des valeurs. Cependant, une rencontre récente pose une question : pourquoi une valeur appelle-t-elle une méthode pointeur dans le code suivant ?

<code class="go">package main

import (
  "fmt"
)

type age int

func (a age) String() string {
  return fmt.Sprintf("%d yeasr(s) old", int(a))
}

func (a *age) Set(newAge int) {
  if newAge >= 0 {
    *a = age(newAge)
  }
}

func main() {
  var vAge age = 5
  pAge := new(age)
  vAge.Set(10) // Compilation successful
}</code>

Pour résoudre ce problème, nous nous tournons vers la spécification du langage Go. Sous « Appels », il est indiqué :

Un appel de méthode x.m() est valide si l'ensemble de méthodes de (le type de) x contient m et que la liste d'arguments peut être affectée à la liste de paramètres de m. Si x est adressable et que l'ensemble de méthodes de &x contient m, x.m() est un raccourci pour (&x).m().

Dans notre cas, vAge est adressable (une conversion de type en *age est valide), donc vAge.Set(10) est essentiellement (&vAge).Set(10). Puisque le type récepteur de Set() est un pointeur, c'est pourquoi la valeur vAge peut invoquer la méthode pointeur Set().

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 !

Article chaud

Guide du débutant de Rimworld: Odyssey
1 Il y a quelques mois By Jack chen
Porce de variable PHP expliquée
4 Il y a quelques semaines By 百草
Conseils pour écrire des commentaires PHP
3 Il y a quelques semaines By 百草
Commentant le code en php
3 Il y a quelques semaines By 百草

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
1509
276
Opter pour un traitement audio / vidéo Opter pour un traitement audio / vidéo Jul 20, 2025 am 04:14 AM

Le cœur du traitement audio et vidéo consiste à comprendre le processus de base et les méthodes d'optimisation. 1. Le processus de base comprend l'acquisition, le codage, la transmission, le décodage et la lecture, et chaque lien a des difficultés techniques; 2. Des problèmes courants tels que l'audio et l'aberration vidéo, le retard de latence, le bruit sonore, l'image floue, etc. peuvent être résolues par ajustement synchrone, optimisation de codage, module de réduction du bruit, ajustement des paramètres, etc.; 3. Il est recommandé d'utiliser FFMPEG, OpenCV, WebBrTC, GStreamer et d'autres outils pour atteindre des fonctions; 4. En termes de gestion des performances, nous devons prêter attention à l'accélération matérielle, à la définition raisonnable des fréquences d'images de résolution, à des problèmes de concurrence et de fuite de mémoire de contrôle. La maîtrise de ces points clés contribuera à améliorer l'efficacité du développement et l'expérience utilisateur.

Comment créer un serveur Web dans Go Comment créer un serveur Web dans Go Jul 15, 2025 am 03:05 AM

Il n'est pas difficile de créer un serveur Web écrit en Go. Le noyau réside dans l'utilisation du package net / http pour implémenter des services de base. 1. Utilisez Net / HTTP pour démarrer le serveur le plus simple: enregistrez les fonctions de traitement et écoutez les ports via quelques lignes de code; 2. Gestion du routage: utilisez Servmux pour organiser plusieurs chemins d'interface pour une gestion structurée facile; 3. Pratiques communes: routage de groupe par modules fonctionnels et utiliser des bibliothèques tierces pour prendre en charge l'appariement complexe; 4. Service de fichiers statique: Fournissez des fichiers HTML, CSS et JS via HTTP.FileServer; 5. Performances et sécurité: activer HTTPS, limiter la taille du corps de la demande et définir le délai d'attente pour améliorer la sécurité et les performances. Après avoir maîtrisé ces points clés, il sera plus facile d'élargir les fonctionnalités.

Allez sélectionner avec le cas par défaut Allez sélectionner avec le cas par défaut Jul 14, 2025 am 02:54 AM

Le but de Select Plus Default est de permettre à Select d'effectuer un comportement par défaut lorsqu'aucune autre branche n'est prête à éviter le blocage du programme. 1. Lorsque vous recevez des données du canal sans blocage, si le canal est vide, il entrera directement la branche par défaut; 2. En combinaison avec le temps. Après ou Ticker, essayez d'envoyer des données régulièrement. Si le canal est plein, il ne bloque pas et ne sautera pas; 3. Empêcher les blocs de bloces, éviter le programme coincé lorsqu'il est incertain si le canal est fermé; Lorsque vous l'utilisez, veuillez noter que la branche par défaut sera exécutée immédiatement et ne peut pas être abusée, et que par défaut et le cas s'excluent mutuellement et ne seront pas exécutés en même temps.

Développer des opérateurs de Kubernetes en Go Développer des opérateurs de Kubernetes en Go Jul 25, 2025 am 02:38 AM

La façon la plus efficace d'écrire un kubernetesoperator est d'utiliser Go pour combiner kubebuilder et contrôleur-runtime. 1. Comprendre le modèle de l'opérateur: définir les ressources personnalisées via CRD, écrivez un contrôleur pour écouter les changements de ressources et effectuer des boucles de réconciliation pour maintenir l'état attendu. 2. Utilisez KubeBuilder pour initialiser le projet et créer des API pour générer automatiquement les CRD, les contrôleurs et les fichiers de configuration. 3. Définissez la structure de spécification et de statut de CRD dans API / V1 / MYAPP_TYPES.go, et exécutez MakeManifests pour générer CRDYAML. 4. Réconcilier dans le contrôleur

Exemple API GO REST Exemple API GO REST Jul 14, 2025 am 03:01 AM

Comment implémenter rapidement un exemple restapi écrit dans Go? La réponse est d'utiliser la bibliothèque standard NET / HTTP, qui peut être complétée conformément aux trois étapes suivantes: 1. Configurez la structure du projet et initialisez le module; 2. Définissez la structure des données et les fonctions de traitement, y compris l'obtention de toutes les données, l'obtention de données uniques en fonction de l'ID et la création de nouvelles données; 3. Enregistrez l'itinéraire dans la fonction principale et démarrez le serveur. L'ensemble du processus ne nécessite pas de bibliothèque tierce. La fonction Restapi de base peut être réalisée via la bibliothèque standard et peut être testée via le navigateur ou le facteur.

Comment faire une demande HTTP dans Go Comment faire une demande HTTP dans Go Jul 14, 2025 am 02:48 AM

Les méthodes de lancement des demandes HTTP dans GO sont les suivantes: 1. Utilisez http.get () pour initier la demande de GET la plus simple, n'oubliez pas de gérer l'erreur et de fermer le corps; 2. Utilisez http.post () ou http.newRequest () pour envoyer une demande de post, et vous pouvez définir des données JSON ou des données de formulaire; 3. Réglez le délai d'expiration, l'en-tête et les cookies, contrôlez le délai d'expiration et l'en-tête. 4. Les notes comprennent la fermeture du corps, l'objet non-REQ et la définition de l'utilisateur-AG

Go Techniques d'optimisation de requête pour PostgreSQL / MySQL Go Techniques d'optimisation de requête pour PostgreSQL / MySQL Jul 19, 2025 am 03:56 AM

TooptimizeGoapplications interagissant avec unpostgresqlorysql, focusonindexing, sélectiveQueries, connexion-standling, cache, andorfifficiency.1) useproperIndexing - identifier la présence de coloconnes et les composites de ligne et les colomnquer

GO DISTRICT ENREGISTREMENT expliqué GO DISTRICT ENREGISTREMENT expliqué Jul 14, 2025 am 02:57 AM

La fonction principale de la différence est de reporter l'exécution des appels de fonction jusqu'à ce que la fonction actuelle revienne, qui est souvent utilisée pour le nettoyage des ressources. Plus précisément, il comprend: 1. Assurez-vous que les fichiers, les connexions réseau, les verrous et autres ressources sont publiés en temps opportun; 2. L'ordre d'exécution est plus tard en premier (LIFO), et le dernier repère défini est exécuté en premier; 3. Les paramètres sont déterminés lorsque le report est défini et évalué pendant la non-exécution. Si des changements variables sont nécessaires, des fermetures ou des pointeurs peuvent être utilisés; 4. Évitez l'abus de report dans les boucles et empêchez l'accumulation de ressources d'être libérée en temps opportun.

See all articles