
Go 的 sort.Ints 函数仅接受切片([]int)而非数组([N]int),需通过切片语法 array[:] 将数组转换为底层数组相同的可排序切片。
go 的 `sort.ints` 函数仅接受切片(`[]int`)而非数组(`[n]int`),需通过切片语法 `array[:]` 将数组转换为底层数组相同的可排序切片。
在 Go 中,数组(如 [100]int)和切片([]int)是两种不同的类型,具有关键区别:数组长度是类型的一部分,且不可变;而切片是引用类型,底层指向数组,支持动态操作(包括排序)。sort.Ints 函数签名明确要求 []int,因此直接传入 [100]int 会导致编译错误:
cannot use sortedArray (type [100]int) as type []int in argument to sort.Ints
✅ 正确做法是使用切片表达式 array[:] —— 它创建一个覆盖整个数组的切片,共享原数组底层数组,无需额外内存分配:
func sortArray(array [100]int) [100]int {
sort.Ints(array[:]) // ✅ 正确:将数组转为 []int 后原地排序
return array
}⚠️ 注意事项:
-
array[:]不会复制元素,排序操作直接修改原数组内容; - 返回值仍是
[100]int,因 Go 中数组按值传递,但函数内对array[:]的修改会影响传入的副本(即函数内array本身); - 若需避免隐式拷贝开销或更灵活处理,推荐直接使用切片作为参数:
func sortSlice(slice []int) {
sort.Ints(slice) // 更惯用:输入切片,原地排序,无拷贝
}
// 调用示例:
nums := []int{3, 1, 4, 1, 5}
sortSlice(nums) // nums 现为 [1 1 3 4 5]? 总结:Go 中排序应优先使用切片([]int);若必须处理固定大小数组,用 array[:] 转换即可。避免冗余变量(如 var sortedArray = array),既无必要也易引发误解。

















