Maison > développement back-end > Golang > Comment puis-je cloner une structure Go avec des champs non exportés ?

Comment puis-je cloner une structure Go avec des champs non exportés ?

DDD
Libérer: 2025-01-03 00:49:36
original
948 Les gens l'ont consulté

How Can I Clone a Go Struct with Unexported Fields?

Comment cloner une structure avec un champ non exporté ?

Dans Go, les structures avec des champs non exportés posent des problèmes lors du clonage d'objets. Si le champ d'une structure n'est pas exporté, il n'est pas accessible ni modifié en dehors du package déclarant.

Problème :

Considérez la structure T suivante :

type T struct {
    S  string
    is []int
}
Copier après la connexion

Attribuer un objet T à un autre ne créera pas de copie indépendante car le champ non exporté est shared.

Solution 1 : Méthode Clone

La solution la plus simple consiste à fournir une méthode Clone dans le package où T est défini. Cette méthode peut copier explicitement les champs de T, y compris le champ non exporté.

Solution 2 : Setters

Si fournir une méthode Clone n'est pas réalisable, fournir un setter La fonction pour le champ non exporté, telle que SetIs(), permet une modification contrôlée du champ.

Limitation :

Il est important de noter que ces solutions reposent sur la disponibilité du code source du type. Si vous travaillez avec des packages tiers, le clonage de structures avec des champs non exportés peut ne pas être possible sans modifications du package d'origine.

Approche peu sûre (non recommandée) :

Pendant que l'utilisation du package unsafe peut contourner les restrictions d'accès aux champs non exportés, cette approche est fortement déconseillée car elle viole les principes d'encapsulation de Go et peut conduire à un temps d'exécution erreurs.

Option alternative :

Si la modification des champs non exportés n'est pas essentielle, envisagez d'extraire les données souhaitées dans une structure distincte et clonée. Par exemple, le champ is non exporté pourrait être extrait par réflexion, en préservant sa valeur initiale.

var r T
s := T{S: p.S}
Copier après la connexion

Conclusion :

Le clonage de structures avec des champs non exportés nécessite un examen attentif et peut impliquer des solutions spécifiques au package. Il est crucial de donner la priorité à la sécurité et à l'encapsulation du code tout en évaluant les options disponibles.

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