Golang切片调整大小。在两个方向上较小,但在一个方向上可能较大?

Golang切片调整大小。在两个方向上较小,但在一个方向上可能较大?,go,slice,Go,Slice,我只是想知道,为什么显然不可能完全恢复已调整大小的切片 package main import ( "fmt" ) func main() { s := []int{1, 2, 3, 4, 5} fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s) fmt.Println("address of 0th element:", &s[0]) s = s[1:4] fmt.Pr

我只是想知道,为什么显然不可能完全恢复已调整大小的切片

package main

import (
    "fmt"
)

func main() {
    s := []int{1, 2, 3, 4, 5}
    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)
    fmt.Println("address of 0th element:", &s[0])

    s = s[1:4]
    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)
    fmt.Println("address of 0th element:", &s[0])

    // extend behind only ...
    s = s[:4]
    fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)
    fmt.Println("address of 0th element:", &s[0])
}

因此,再次获取第一个元素(1)。在某些情况下,这可能会有所帮助。 我读过。。。但我不明白 他们为什么这样做。要存储起始位置和 数组的第0个元素“听起来很简单”

我有一种感觉,我没有正确地理解某些事情
或者我忽略了什么

因为slice struct只有指向第一个元素的指针、整数长度和整数容量

您可以看到切片运行时表示

因此,如果我们为同一变量分配一个新的片,我们将丢失位于新的第一个元素
s=s[1:4]
之前的元素,但是如果分配
s=s[:4]
我们将不会丢失片的容量

注意:使用反射和指针算法仍然可以获得丢失的项目,但这是不安全的,而且非常不值得推荐的。

阅读文档:,“听起来很简单”不是有效的参数。@peterSO我写过“我感觉我没有正确理解某些内容,或者忽略了某些内容。”如果没有回应,我当然会接受:)