【问题标题】:Delete or resize array in go [closed]在go中删除或调整数组大小[关闭]
【发布时间】:2018-08-10 17:05:04
【问题描述】:

调用 CalRange 函数后我需要删除或调整 isPrime 数组的大小(isPrime=nil 不起作用)

isPrime := [size]bool{}
CalRange(size, maxİndex, isPrime[:])
isPrime = nil

感谢大家的回答 我就是这样解决的。 How to delete struct object in go?

person1 := &Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = nil

【问题讨论】:

  • [size]bool{} 不是一个好主意,因为当size 的值发生变化时,isPrime 的类型会发生变化。
  • 使用切片而不是数组。
  • “不工作”?你能展示预期和实际的结果吗?

标签: arrays go


【解决方案1】:

在 Go 中,数组与切片不同。切片可以为 nil,但数组不能,因为它们是静态的。

在您上面的代码中,在第 1 行,isPrime 的内容实际上是 [false false false ...],在您的大小变量允许的范围内具有尽可能多的错误值。

因此,您的数组无法真正删除或调整大小。它只能是零值。

如果你真的需要调整它的大小,我建议改用切片,或者创建一个具有新大小的新数组并将之前数组的内容复制到其中。

【讨论】:

    【解决方案2】:

    Go 是一种垃圾收集语言,你不能从内存中删除对象,你只能“清除”它们。详情见How to delete struct object in go?数组也不能resize,数组是固定大小的(大小是类型的一部分)。

    要清除数组,您可以将其zero value 分配给它(不是nil)。将composite literal 用于零值数组,例如[size]bool{}

    const size = 4
    isPrime := [size]bool{true, true}
    fmt.Println(isPrime)
    
    isPrime = [size]bool{}
    fmt.Println(isPrime)
    

    输出(在Go Playground上试试):

    [true true false false]
    [false false false false]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多