Private Felder und Methoden für Strukturen in einem Paket können nicht erstellt werden
Frage:
Ist es möglich, das Feld und die Methode einer Struktur innerhalb eines Go-Pakets als privat festzulegen, auf die nur Mitglieder dieser Struktur zugreifen können, nicht jedoch andere Paketfunktionen oder externer Code?
Kontext:
Bedenken Sie den folgenden Codeausschnitt:
package mypackage type mytype struct { size string hash uint32 } func (r *mytype) doPrivate() string { return r.size } func (r *mytype) Do() string { return doPrivate("dsdsd") }
In diesem Fall sollten die Größen- und Hashfelder sowie die doPrivate-Methode in mytype gekapselt werden, sodass für andere Typen kein Zugriff möglich ist.
Antwort:
Während Go es Ihnen ermöglicht, einen Bezeichner basierend auf seiner Groß- und Kleinschreibung zu exportieren oder auszublenden, gibt es in Go kein Konzept für private Klassenmitglieder oder das Ausblenden von Daten.
Konventionell sind exportierte Bezeichner (mit einem Großbuchstaben initialisiert) für die öffentliche Verwendung innerhalb eines Pakets vorgesehen. Umgekehrt haben nicht exportierte Bezeichner (mit einem Kleinbuchstaben initialisiert) eingeschränkten Zugriff innerhalb dieses Pakets.
Innerhalb eines bestimmten Pakets gibt es jedoch keine Möglichkeit, den Zugriff auf Strukturmitglieder über diesen Paketbereich hinaus weiter einzuschränken. Um eine Datenkapselung zu erreichen, besteht der vorgeschlagene Ansatz darin, ein separates Paket zu erstellen, in dem die gesamte Struktur und die zugehörigen Methoden die einzigen in diesem Paket definierten Elemente sind.
Das obige ist der detaillierte Inhalt vonKönnen Sie Strukturfelder und -methoden in Go-Paketen privat machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!