gpt4 book ai didi

go - 减少 slice 容量

转载 作者:IT老高 更新时间:2023-10-28 13:05:51 28 4
gpt4 key购买 nike

我的问题是关于 slice 长度和容量。我在这里学习 Go:https://tour.golang.org/moretypes/11 .

(我的问题被标记为可能与 this 重复;但是,事实并非如此。我的问题是关于切断 slice 的前几个元素及其含义。)

s = s[:4]s = s[:0] 时为什么行 s = s[2:] 会减小容量 没有?我看到的唯一区别是 s = s[2:] 中的冒号前有一个数字,而其他两行中的冒号后有一个数字。

有没有办法恢复我们用 s = s[2:] 截断的前两个元素?

package main

import "fmt"

func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)

// Slice the slice to give it zero length.
s = s[:0]
printSlice(s)

// Extend its length.
s = s[:4]
printSlice(s)

// Drop its first two values.
s = s[2:]
printSlice(s)
}

func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

点击运行按钮后,我们得到以下内容。

len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]

最佳答案

您可以阅读有关 slice 的更多信息 here .但我认为这段话回答了你的问题:

Slicing does not copy the slice's data. It creates a new slice value that points to the original array. This makes slice operations as efficient as manipulating array indices. Therefore, modifying the elements (not the slice itself) of a re-slice modifies the elements of the original slice.

因此,如果将 slice 数据分配给同一变量,则无法恢复 slice 数据。

容量减少是因为通过删除前 2 个元素,您正在更改指向新 slice 的指针( slice 由指向第一个元素的指针引用)。

slice 在内存中的表示方式: def

make([]byte, 5)

memory vis

s = s[2:4]

slice cap decrease

关于go - 减少 slice 容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43294449/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com