


Sollte ich eine Kopie für private Slice-Felder verwenden, bevor ich sie vom Getter zurückgebe?
Bei der objektorientierten Programmierung wird normalerweise die Getter-Methode verwendet, um den Wert einer privaten Mitgliedsvariablen zu erhalten. Manchmal stellt sich jedoch die Frage: Sollte ich private Slice-Felder kopieren, bevor ich sie von der Getter-Methode zurückgebe? Die Antwort auf diese Frage ist nicht absolut und hängt von den konkreten Umständen ab. In einigen Fällen kann das Kopieren eines privaten Slice-Felds verhindern, dass externer Code das Feld ändert, wodurch die Datenkonsistenz und -sicherheit geschützt wird. In einigen Szenarien mit hohen Leistungsanforderungen kann der Kopiervorgang jedoch zusätzlichen Aufwand verursachen. In diesem Fall können Sie erwägen, die Referenz direkt an das Slice-Feld zurückzugeben. Daher müssen Sie die Vor- und Nachteile basierend auf der jeweiligen Situation abwägen und die geeignete Methode zur Handhabung der Rückgabe privater Slice-Felder auswählen.
Frageninhalt
Wenn struct
ein privates Slice-Feld hat, das einen Getter erfordert, sollte das Slice vor der Rückgabe kopiert werden?
Ich möchte bestätigen, ob es sicher ist, private Slices direkt vom Getter zurückzugeben, da ich nicht möchte, dass der Aufrufer sie über den Rückgabewert des Getters ändern kann.
Bei meinen bisherigen Tests scheint es, dass die zurückgegebenen Slices nicht mit den privaten Slice-Feldern verknüpft sind.
Ich bin mir jedoch nicht sicher, ob dies in allen Szenarien funktioniert, und ich möchte copy
nicht verwenden, wenn es nicht benötigt wird.
Das habe ich versucht:
package main import "fmt" type basket struct { fruits []string } func (b *basket) fruits() []string { return b.fruits } func (b *basket) addfruit(fruit string) { b.fruits = append(b.fruits, fruit) } func main() { basket := &basket{} basket.addfruit("apple") basket.addfruit("banana") basket.addfruit("orange") fruits := basket.fruits() fmt.println(fruits) // [apple banana orange] fruits = append(fruits, "mango") fruits = append(fruits, "lemon") fruits = append(fruits, "pineapple") fmt.println(fruits) // [apple banana orange mango lemon pineapple] fmt.println(basket.fruits()) // [apple banana orange] }
So sieht der Getter für copy
aus:
func (b *Basket) Fruits() []string { result := make([]string, len(b.fruits)) copy(result, b.fruits) return result }
Workaround
Wie @kostix in den Kommentaren erwähnt hat, kommt es auf das Szenario an.
Für die im OP möchten wir copy
verwenden, weil wir die Ausgabe des Getters vom privaten Feld trennen möchten, damit der Aufrufer sie nicht ändern kann.
Das obige ist der detaillierte Inhalt vonSollte ich eine Kopie für private Slice-Felder verwenden, bevor ich sie vom Getter zurückgebe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In dem Artikel wird der Befehl go fMT in Go -Programmierung erörtert, in dem Code formatiert werden, um offizielle Richtlinien für den Stil einzuhalten. Es zeigt die Bedeutung von GO FMT für die Aufrechterhaltung der Debatten mit Codekonsistenz, Lesbarkeit und Reduzierung von Stildebatten. Best Practices fo

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG
