【问题标题】:Go error: non-constant array boundGo 错误:非常量数组绑定
【发布时间】:2016-11-16 16:30:26
【问题描述】:

我正在尝试在go 中编写的合并排序实现中计算数组的必要长度。它看起来像这样:

func merge(array []int, start, middle, end int) {
  leftLength := middle - start + 1
  rightLength := end - middle
  var left [leftLength]int
  var right [rightLength]int
  //...
}

然后我在运行go test 时收到此投诉:

./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength

我假设go 不喜欢用户使用计算值来实例化数组的长度。它只接受常量。我应该放弃并改用切片吗?我希望 slice 是一个动态数组,这意味着它要么是一个链表,要么在它满时复制到一个更大的数组中。

【问题讨论】:

  • 您“期望”切片是动态数组是什么意思? Read what a slice actually is.
  • 这就是 Slice 在 Go 中的用途。在引擎盖下,它们只是指向数组的指针。
  • @TimCooper 很有趣。切片不是给数组本身一个复杂的接口,而是另一层使数组操作更简单?
  • @TimCooper 见第三个定义merriam-webster.com/dictionary/expect

标签: go


【解决方案1】:

您不能使用在运行时计算的值来实例化这样的数组。而是使用 make 来初始化具有所需长度的切片。它看起来像这样;

left := make([]int, leftLength)

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多