
Go 的 sort.Ints 函数仅接受切片([]int)而非数组([N]int),需通过切片语法 array[:] 将数组转换为底层数组的完整切片视图才能排序。
go 的 `sort.ints` 函数仅接受切片(`[]int`)而非数组(`[n]int`),需通过切片语法 `array[:]` 将数组转换为底层数组的完整切片视图才能排序。
在 Go 中,数组(如 [100]int)和切片([]int)是两种不同的类型:数组长度固定且属于值类型,而切片是引用类型、动态长度,并且是 sort 包中所有排序函数(如 sort.Ints)唯一支持的参数类型。
你遇到的错误:
cannot use sortedArray (type [100]int) as type []int in argument to sort.Ints
正是由于 sort.Ints 期望 []int,但你传入了 [100]int —— 即使内容相同,类型不匹配即编译失败。
✅ 正确做法:使用切片操作 array[:] 获取整个数组的切片视图:
func sortArray(array [100]int) [100]int {
// 创建副本(避免修改原数组)
sorted := array
// 将数组转为切片并原地排序
sort.Ints(sorted[:])
return sorted
}⚠️ 注意事项:
-
array[:]不分配新内存,而是生成指向原数组底层数组的切片,因此sort.Ints(sorted[:])会直接修改sorted的元素; - 若无需保留原始顺序,可省略副本;若需保持输入不变(推荐),务必先复制数组(如
sorted := array); - 大多数实际场景中,应优先使用切片(
[]int)而非定长数组。例如:
func sortSlice(nums []int) []int {
sorted := make([]int, len(nums))
copy(sorted, nums)
sort.Ints(sorted)
return sorted
}? 总结:Go 不允许隐式数组→切片转换,必须显式使用 [:];同时,除非有明确需求(如固定大小、栈上分配),否则建议用 []int 替代 [N]int,以获得更好的灵活性与标准库兼容性。

















