【问题标题】:Can `len()` be greater than `cap()` for a slice in Go? [duplicate]Go 中切片的 len() 可以大于 cap() 吗? [复制]
【发布时间】:2020-10-02 16:22:37
【问题描述】:

https://github.com/google/codesearch/blob/master/index/write.go#L498

上面的页面中提到了以下代码。 len() 可以大于cap() 吗?我认为这里应该使用= 而不是>=。谢谢。

    if len(b.buf) >= cap(b.buf) {

【问题讨论】:

  • < 的倒数是>=。通常包含要检查的整个可能范围,>=,而不是 ==,以防出现“逐一”错误(这在此处实际上不会发生,但通常是一种很好的做法)。典型的例子是 for/while 循环中的条件,虽然打算在每次迭代中递增 1,但如果 == 条件被跳过,则会进入无限循环。
  • @JimB 当> 可以接受时,你能展示一个示例代码吗?
  • @user1424739,抱歉,我不明白这是什么意思。
  • 是的。如果您有硬件缺陷。

标签: go slice


【解决方案1】:

Spec: Length and capacity:

切片的容量是在底层数组中分配空间的元素的数量。在任何时候都存在以下关系:

0 <= len(s) <= cap(s)

所以不,切片的长度不能大于其容量。

在引用的代码中len(b.buf) == cap(b.buf) 就足够了,它可能是代码以其他方式计算的长度(例如,包括要附加的东西的长度),这是有道理的。然后可能是代码被更改/重写,但不是关系。

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 2015-07-24
    • 2016-09-26
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2019-03-09
    • 2019-08-09
    相关资源
    最近更新 更多