Go error:非常数数组绑定

Bre*_*dly 42 go

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

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

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

./mergesort.go:6: non-constant array bound leftLength
./mergesort.go:7: non-constant array bound rightLength
Run Code Online (Sandbox Code Playgroud)

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

eva*_*nal 85

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

left := make([]int, leftLength)
Run Code Online (Sandbox Code Playgroud)

  • *或者您可以使用切片.*切片*在您的示例中使用*; 这是归还的. (4认同)