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

Comment puis-je cloner efficacement des structures Go avec des champs non exportés ?

Patricia Arquette
Libérer: 2024-12-17 13:55:12
original
570 Les gens l'ont consulté

How Can I Effectively Clone Go Structs with Unexported Fields?

Clonage de structures avec des champs non exportés

Dans Go, les champs non exportés d'une structure ne sont pas accessibles ni modifiables en dehors du package déclarant. Cela présente un défi lorsque l'on tente de cloner des objets de tels types.

Énoncé du problème

Considérez la définition de type suivante :

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

Si nous Si vous attribuez un objet de type T à un autre, les modifications apportées au champ T.is non exporté affecteront les deux objets. En effet, l'affectation simple ne crée qu'une copie superficielle et la référence T.is reste partagée.

Limitations

En raison de la nature non exportée de T.is, il ne peut pas être directement accessible ni copié à l'aide de la réflexion. Par conséquent, il n'est pas possible de cloner un objet de type T avec une copie exacte de T.is.

Solutions possibles

  • Fournissez une méthode Clone : Si vous possédez ou pouvez modifier le package contenant le type T, la meilleure solution est d'implémenter une méthode ou une fonction Clone() dans ce package. Cette méthode peut gérer explicitement le clonage des champs non exportés.
  • Utiliser une fonction Clone : Si le package contenant le type T ne peut pas être modifié, vous pouvez envisager de fournir une fonction Clone() personnalisée dans un autre package. . Cette fonction peut accepter un objet de type T comme argument et renvoyer un objet cloné avec une copie exacte de tous les champs, y compris ceux non exportés.
  • Créer un nouvel objet : Pendant qu'il est impossible de copier directement le champ non exporté, vous pouvez créer une nouvelle instance de type T et attribuer manuellement les champs exportés et non exportés de l'objet d'origine. Cependant, les champs non exportés seront définis sur leurs valeurs zéro.
  • Utiliser Reflection (Unsafe) : Bien que cela ne soit pas recommandé, il est possible d'utiliser le package unsafe pour contourner les restrictions d'accès aux champs non exportés. champs. Cependant, cette approche doit être utilisée avec une extrême prudence car elle peut entraîner des erreurs d'exécution et un comportement indéfini.

Remarque :

Il est important de se rappeler que le clonage de structures avec des champs non exportés n'est pas toujours nécessaire. Si les champs non exportés ne sont pas indispensables ou doivent être modifiés en dehors du package déclarant, pensez à les exporter ou à fournir une API appropriée pour y accéder et les modifier.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal