当前位置: 首页 > 面试题库 >

盖vs片的镜头

薛晨
2023-03-14
问题内容

golang中的cap和len之间有什么区别?

根据定义:

切片既有长度又有容量。

切片的长度是其包含的元素数。

切片的容量是基础数组中元素的数量,从切片中的第一个元素开始计算。

x := make([]int, 0, 5) // len(b)=0, cap(b)=5

len是否仅表示非null值?


问题答案:

切片是一种抽象,它在后台使用数组。

cap告诉您基础数组的容量。len告诉您数组中有多少个项目。

Go中的slice抽象非常好,因为它将为您调整基础数组的大小,此外,Go中的数组无法调整大小,因此几乎总是使用slice。

例:

s := make([]int, 0, 3)
for i := 0; i < 5; i++ {
    s = append(s, i)
    fmt.Printf("cap %v, len %v, %p\n", cap(s), len(s), s)
}

将输出如下内容:

cap 3, len 1, 0x1040e130
cap 3, len 2, 0x1040e130
cap 3, len 3, 0x1040e130
cap 6, len 4, 0x10432220
cap 6, len 5, 0x10432220

如您所见,一旦满足容量要求,append将返回具有更大容量的新切片。在第4次迭代中,您将注意到更大的容量和新的指针地址。

播放范例

我知道您没有询问数组和追加,但是它们是了解切片和内置原因的基础。



 类似资料:
  • Go语言中切片的cap和len有什么区别? 根据定义: 切片既有长度也有容量。 切片的长度是它包含的元素数。 切片的容量是底层数组中的元素数,从切片中的第一个元素开始计数。 len是否仅表示非空值?

  • 本文向大家介绍Haskell优雅的镜片,包括了Haskell优雅的镜片的使用技巧和注意事项,需要的朋友参考一下 示例 除了makeLenses用于生成Lenses的标准功能外,Control.Lens.TH还提供该makeClassy功能。makeClassy具有相同的类型,并以与基本上相同的方式工作makeLenses,但有一个关键区别。除了生成标准的镜头和遍历之外,如果该类型没有参数,它还将创

  • 实现图片放大镜功能,对缩小图进行原图放大。在图片上移动手指,图片放大部分也随之移动。 [Code4App.com]

  • 对图片进行处理,显示各种滤镜效果。 作者说:本人是新手菜鸟,代码可能写的不大好,各位见谅啊。 [Code4App.com]

  • 问题内容: 我是Go编程的新手。我已经阅读了Go编程书籍,其中的内容由三部分组成:指向数组的指针,长度和容量。 我对nil slices(切片没有指向len的下层数组,len = 0,cap = 0),非lens切片(其中只有len = 0,cap = 0)和空切片之间感到困惑。 谁能告诉我nil和空片是否相同?如果两者都不相同,那么请说出两者之间的区别是什么? 如何测试切片是否为空? 另外,指针

  • 问题内容: 制作自定义字段时,在覆盖vs 方法以呈现字段的自定义部分之间应该考虑什么? 我的代码当前覆盖了,但是我只是阅读了建议实现该方法的javadoc 。在我非常简单的自定义字段(例如带有渐变填充的自定义横幅)中,我可以看到的唯一区别是,如果我覆盖,则必须调用,但是如果我覆盖了,则无需调用。 我意识到,对于更高级的定制,需要考虑一些因素,其中一种方法很可能被认为是不良实践。 我是否应该更改我的