Heim > Backend-Entwicklung > Golang > Wie kann ich eine Go-Struktur mit nicht exportierten Feldern klonen?

Wie kann ich eine Go-Struktur mit nicht exportierten Feldern klonen?

DDD
Freigeben: 2025-01-03 00:49:36
Original
948 Leute haben es durchsucht

How Can I Clone a Go Struct with Unexported Fields?

Wie klont man eine Struktur mit nicht exportiertem Feld?

In Go stellen Strukturen mit nicht exportierten Feldern eine Herausforderung beim Klonen von Objekten dar. Wenn das Feld einer Struktur nicht exportiert ist, kann außerhalb des deklarierenden Pakets nicht darauf zugegriffen oder es geändert werden.

Problem:

Betrachten Sie die folgende T-Struktur:

type T struct {
    S  string
    is []int
}
Nach dem Login kopieren

Durch die Zuweisung eines T-Objekts zu einem anderen wird keine unabhängige Kopie erstellt, da das nicht exportierte Feld vorhanden ist geteilt.

Lösung 1: Clone-Methode

Die einfachste Lösung besteht darin, eine Clone-Methode in dem Paket bereitzustellen, in dem T definiert ist. Diese Methode kann die Felder von T explizit kopieren, einschließlich des nicht exportierten Felds.

Lösung 2: Setter

Wenn die Bereitstellung einer Clone-Methode nicht möglich ist, stellen Sie einen Setter bereit Eine Funktion für das nicht exportierte Feld, wie z. B. SetIs(), ermöglicht eine kontrollierte Änderung des Feld.

Einschränkung:

Es ist wichtig zu beachten, dass diese Lösungen auf der Verfügbarkeit des Quellcodes für den Typ basieren. Wenn Sie mit Paketen von Drittanbietern arbeiten, ist das Klonen von Strukturen mit nicht exportierten Feldern ohne Änderungen am Originalpaket möglicherweise nicht möglich.

Unsicherer Ansatz (nicht empfohlen):

Während Durch die Verwendung des unsicheren Pakets können Zugriffsbeschränkungen auf nicht exportierte Felder umgangen werden. Von diesem Ansatz wird dringend abgeraten, da er gegen die Kapselungsprinzipien von Go verstößt und zu Laufzeitfehlern führen kann Fehler.

Alternative Option:

Wenn die Änderung nicht exportierter Felder nicht unbedingt erforderlich ist, sollten Sie erwägen, die gewünschten Daten in eine separate, geklonte Struktur zu extrahieren. Beispielsweise könnte das nicht exportierte is-Feld mithilfe von Reflektion extrahiert werden, wobei sein Anfangswert erhalten bleibt.

var r T
s := T{S: p.S}
Nach dem Login kopieren

Schlussfolgerung:

Das Klonen von Strukturen mit nicht exportierten Feldern erfordert sorgfältige Überlegungen und kann paketspezifische Lösungen beinhalten. Bei der Bewertung der verfügbaren Optionen ist es wichtig, der Codesicherheit und der Kapselung Priorität einzuräumen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Go-Struktur mit nicht exportierten Feldern klonen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage