【发布时间】: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