recherche
Maisondéveloppement back-endGolangPourquoi ma méthode Go ne modifie-t-elle pas la valeur de l'instance, sauf si j'utilise un récepteur pointeur ?

Why Doesn't My Go Method Modify the Instance Value Unless I Use a Pointer Receiver?

Méthode Golang avec récepteur de pointeur

Lorsque vous essayez de modifier la valeur d'une instance via une méthode, il est crucial de comprendre le concept de pointeur récepteurs. Dans cet exemple, la méthode SetSomeField ne fonctionne pas comme prévu car son récepteur n'est pas de type pointeur.

Pour remédier à cela, nous modifions la méthode SetSomeField pour accepter un récepteur pointeur comme suit :

func (i *Implementation) SetSomeField(newValue string) {
    ...
}

Cependant, ce changement introduit un nouveau problème : la struct n'implémente plus l'interface car la méthode GetSomeField a toujours une valeur récepteur.

La solution réside dans l'utilisation d'un pointeur vers la structure lors de l'implémentation de l'interface. Ce faisant, nous permettons à la méthode de modifier l'instance réelle sans créer de copie. Voici le code modifié :

type IFace interface {
    SetSomeField(newValue string)
    GetSomeField() string
}

type Implementation struct {
    someField string
}

func (i *Implementation) GetSomeField() string {
    return i.someField
}

func (i *Implementation) SetSomeField(newValue string) {
    i.someField = newValue
}

func Create() *Implementation {
    return &Implementation{someField: "Hello"}
}

func main() {
    var a IFace
    a = Create()
    a.SetSomeField("World")
    fmt.Println(a.GetSomeField())
}

Dans ce code mis à jour, la fonction Create renvoie un pointeur vers la structure Implementation, qui implémente l'interface IFace. Par conséquent, la variable a de type IFace peut faire référence au pointeur vers la structure Implementation, permettant à la méthode SetSomeField de modifier sa valeur.

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
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
Apprenez GO BYTE SLICE Manipulation: Travailler avec le package 'octets'Apprenez GO BYTE SLICE Manipulation: Travailler avec le package 'octets'May 16, 2025 am 12:14 AM

TheBytespackageingOsSesentialForMipulatingBytesLeSeseChectively.1) usebytes.jointoconcatenatelices.2) employés.bufferfordynamicdataconstruction.3) utilisentIndexandContainsForSearching.4)

Comment utiliser le package 'Encoding / Binary' pour encoder et décoder les données binaires en Go (étape par étape)Comment utiliser le package 'Encoding / Binary' pour encoder et décoder les données binaires en Go (étape par étape)May 16, 2025 am 12:14 AM

Tousethe "Encoding / Binary" PackageingoforeCcodingandDeccodingBinaryData, suivitheSesteps: 1) ImportThepackageandCreatAbuffer.2) usebinar

Comment utilisez-vous le package 'Encoding / Binary' pour encoder et décoder les données binaires en Go?Comment utilisez-vous le package 'Encoding / Binary' pour encoder et décoder les données binaires en Go?May 16, 2025 am 12:13 AM

Le package d'encodage / binaire fournit un moyen unifié de traiter les données binaires. 1) Utilisez des fonctions Binary.Write et Binary. 2) Les types personnalisés peuvent être gérés en mettant en œuvre l'interface binaire.ByteOrder. 3) Faites attention à la sélection de Endianness, à l'alignement des données et à la gestion des erreurs pour assurer l'exactitude et l'efficacité des données.

GO PACKAGE CONSTAGES: Est-il complet pour chaque cas d'utilisation?GO PACKAGE CONSTAGES: Est-il complet pour chaque cas d'utilisation?May 16, 2025 am 12:09 AM

L'ensemble des chaînes de Go ne convient pas à tous les cas d'utilisation. Il fonctionne pour les opérations de chaîne les plus courantes, mais des bibliothèques tierces peuvent être nécessaires pour les tâches NLP complexes, la correspondance d'expression régulière et l'analyse de format spécifique.

Quelles sont les limites du package de chaîne Go?Quelles sont les limites du package de chaîne Go?May 16, 2025 am 12:05 AM

Le package des chaînes dans GO a des limitations d'utilisation des performances et de la mémoire lors de la gestion d'un grand nombre d'opérations de chaîne. 1) Problèmes de performance: Par exemple, les chaînes. Replace et Strings.replaceALL sont moins efficaces lorsqu'ils traitent des remplacements de chaînes à grande échelle. 2) Utilisation de la mémoire: Étant donné que la chaîne est immuable, de nouveaux objets seront générés à chaque opération, ce qui entraîne une augmentation de la consommation de mémoire. 3) Traitement Unicode: il n'est pas suffisamment flexible lors de la gestion des règles Unicode complexes et peut nécessiter l'aide d'autres packages ou bibliothèques.

Manipulation de cordes en Go: Master le package 'Strings'Manipulation de cordes en Go: Master le package 'Strings'May 14, 2025 am 12:19 AM

La maîtrise du package des chaînes en langue GO peut améliorer les capacités de traitement du texte et l'efficacité de développement. 1) Utilisez la fonction CONTAINS pour vérifier les sous-chaînes, 2) Utilisez la fonction d'index pour trouver la position de sous-chaîne, 3) Join de la fonction Splice Splice Slices de chaîne, 4) Remplacer la fonction pour remplacer les sous-chaînes. Soyez prudent pour éviter les erreurs courantes, comme ne pas vérifier les chaînes vides et les problèmes de performances de fonctionnement de grande chaîne.

Aller des conseils et astuces de package 'Strings'Aller des conseils et astuces de package 'Strings'May 14, 2025 am 12:18 AM

Vous devez vous soucier du package des chaînes dans GO, car il peut simplifier la manipulation des chaînes et rendre le code plus clair et plus efficace. 1) Utilisez des chaînes.join pour épisser efficacement les chaînes; 2) Utilisez des chaînes. 3) Trouver des positions de sous-chaîne à travers des chaînes.index et des chaînes.LastIndex; 4) Utilisez des chaînes.replaceALL pour remplacer les chaînes; 5) Utilisez des chaînes. 6) Vérifiez toujours les entrées pour éviter les résultats inattendus.

Package 'Strings' dans Go: votre go-to pour les opérations de chaînePackage 'Strings' dans Go: votre go-to pour les opérations de chaîneMay 14, 2025 am 12:17 AM

ThestringsPackageingOsOssentialForeFicientsStringManipulation.1) itofferssimpleyetpowerfunctionsfunctionsfortaskslikeCheckingSubStringSandjoiningStrings.2) ithandlesunicodewell, with-ctionslikestrings.Fieldsforwhitespace-separis

See all articles

Outils d'IA chauds

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.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

SublimeText3 version Mac

SublimeText3 version Mac

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