Heim > Backend-Entwicklung > Golang > Slicing vs. Slicing in Go

Slicing vs. Slicing in Go

王林
Freigeben: 2024-02-05 23:42:03
nach vorne
565 Leute haben es durchsucht

Slicing vs. Slicing in Go

Frageninhalt

In der Dokumentation der unsafe.SliceData-Funktion in go heißt es:

SliceData returns a pointer to the underlying array of the argument
slice.

If cap(slice) > 0, SliceData returns &slice[:1][0].

Nach dem Login kopieren

Was ist die Logik hinter der Rückgabe von &slice[:1][0] anstelle von &slice[0]? Soweit ich weiß (und meine Tests bestätigen), geben beide die gleiche Adresse zurück. Gibt es einen bestimmten Grund, warum Go-Entwickler Ersteres statt Letzteres verwenden? &slice[:1][0] 而不是 &slice[0] 背后的逻辑是什么?据我所知(并且我的测试证实),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?


正确答案


切片可能具有正容量(cap(slice) > 0),但同时可能具有 0 长度。像 slice[0]

Richtige Antwort

slice[:1] 那样对其进行切片,这将产生长度为 1 的切片,并且您可以像 result[0]Ein Slice kann eine positive Kapazität haben (cap(slice) > 0), aber gleichzeitig auch < code>0 code> Länge. Die Indizierung wie slice[0] führt zu einer Laufzeitpanik.

Wenn das Slice eine positive Kapazität hat, können Sie das Ergebnis wie

indizieren, ohne eine Laufzeitpanik auszulösen.

Zum Beispiel:

slice := make([]int, 0, 5)
fmt.Println(&slice[0])
Nach dem Login kopieren

Das ergibt: 🎜
panic: runtime error: index out of range [0] with length 0
Nach dem Login kopieren
🎜Aber das funktioniert: 🎜
fmt.Println(&slice[:1][0])
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSlicing vs. Slicing in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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