Heim >Backend-Entwicklung >Golang >Ist es sicher, die Referenz beizubehalten, die Daten jedoch nicht der tatsächlichen Variablen zuzuweisen?

Ist es sicher, die Referenz beizubehalten, die Daten jedoch nicht der tatsächlichen Variablen zuzuweisen?

PHPz
PHPznach vorne
2024-02-08 21:42:09946Durchsuche

Ist es sicher, die Referenz beizubehalten, die Daten jedoch nicht der tatsächlichen Variablen zuzuweisen?

php Editor Banana Wenn wir diskutieren, ob es sicher ist, Referenzen beizubehalten, aber keine Daten tatsächlichen Variablen zuzuweisen, müssen wir verstehen, wie Referenzen und Variablenzuweisungen funktionieren. In PHP ist eine Referenz ein Alias, der auf die Speicheradresse einer Variablen verweist, die sich denselben Speicherplatz teilt. Wenn wir eine Referenz beibehalten, die Daten aber keiner tatsächlichen Variablen zuweisen, erstellen wir tatsächlich eine Referenz auf einen Raum und nicht auf konkrete Daten. Dieser Ansatz ist in manchen Situationen sicher, es gibt jedoch einige Einschränkungen.

Frageninhalt

Ich möchte eine Referenzliste in einem Slice führen, kann aber keine Online-Ressourcen finden, die erklären, ob es sicher ist, eine Referenz zu behalten, ohne sie einer Variablen zuzuweisen.

Ich meine, ist es möglich, dass das Betriebssystem etwas in die referenzierte Adresse schreibt, was der Programmierer nicht erwartet hat?

Hier ist ein Beispielcode:

type ListItem [8]uint64

list := make([]*ListItem, 0)

list = append(list, &ListChunk{})
list = append(list, &ListChunk{})
list = append(list, &ListChunk{})

Mit anderen Worten: Ist garantiert, dass die Elemente in einem Slice mit dem Namen list während der Ausführung des Programms gleich bleiben, egal wie lange es dauert?

Workaround

Wahrscheinlich nicht in Ihrem Fall (die Referenz bleibt gleich), aber es hängt auch davon ab, was Ihr Programm damit macht:

Die Go-Laufzeit ändert die im Slice gespeicherten Referenzen (Zeiger) während der Lebensdauer des Programms nicht, es gibt jedoch eine Bedingung: -Sie weisen das Slice oder seine Elementzeiger (Array von [8]uint64) in der Funktion nicht neu zu. Solange Sie den Elementen des Slice keinen neuen Wert zuweisen, bleibt die Referenz unverändert.

Das obige ist der detaillierte Inhalt vonIst es sicher, die Referenz beizubehalten, die Daten jedoch nicht der tatsächlichen Variablen zuzuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen