Heim >Backend-Entwicklung >Golang >Wie erstelle ich sicher ein Go-Slice oder Array aus einem „unsafe.Pointer'?
Frage:
Gegeben Ein unsicherer Zeiger auf ein Array. Wie können wir daraus ein Array oder einen Slice erstellen, ohne dass Speicherkosten anfallen? kopieren?
Antwort:
Slice mit Reflect erstellen:
Der empfohlene Ansatz besteht darin, das Reflect-Paket zu verwenden Erstellen Sie einen Slice-Header, der auf dieselben zugrunde liegenden Daten verweist wie die unsicheren Zeiger.
// Create a slice header sh := &reflect.SliceHeader{ Data: p, // Unsafe pointer to the array Len: size, Cap: size, } // Use the slice header to create a slice data := *(*[]byte)(unsafe.Pointer(sh))
Erstellen eines Arrays mit Reflect:
Um ein Array (Zeiger auf Elemente im zusammenhängenden Speicher) aus einem unsicheren Zeiger zu erstellen, können wir zuerst erstellen ein Stück und nehmen Sie dann seine Adresse:
// Create a slice data := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ Data: p, Len: size, Cap: size, })) // Get the address of the slice (pointer to the first element) arr := (*[size]byte)(unsafe.Pointer(&data[0]))
Vorbehalte und Warnungen:
Das obige ist der detaillierte Inhalt vonWie erstelle ich sicher ein Go-Slice oder Array aus einem „unsafe.Pointer'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!