登录
首页 >  Golang >  Go问答

切片容量

来源:stackoverflow

时间:2024-04-26 10:54:38 369浏览 收藏

你在学习Golang相关的知识吗?本文《切片容量》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我是 golang 新手,正在关注 tour。下面的代码产生以下结果:

长度=5 上限=5 [0 0 0 0 0]

b len=0 cap=5 []

c len=2 cap=5 [0 0]

d len=3 cap=3 [0 0 0]

在根本没有指定的情况下,c 如何具有与 b 相同的上限?

package main

import "fmt"

func main() {
    a := make([]int, 5)
    printSlice("a", a)

    b := make([]int, 0, 5)
    printSlice("b", b)

    c := b[:2]
    printSlice("c", c)

    d := c[2:5]
    printSlice("d", d)
}

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

解决方案


每个切片都是指向底层数组的指针类型。当您创建 b 时,您创建了 b 指向的基础数组。当您通过重新切片 b 创建 c 时,您将创建一个指向与 b 相同的基础数组的新切片。

当您更改 b 中的某些条目时,您会注意到 c 中的这些值也会更改。

有一个官方博客条目,详细解释了这一切:https://blog.golang.org/go-slices-usage-and-internals

本篇关于《切片容量》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>