
Go 的 sort.Ints() 函数仅接受 []int 类型切片,不能直接传入固定长度的数组(如 [5]int);需通过切片语法 arr[:] 将数组转换为等长切片后调用。
go 的 `sort.ints()` 函数仅接受 `[]int` 类型切片,不能直接传入固定长度的数组(如 `[5]int`);需通过切片语法 `arr[:]` 将数组转换为等长切片后调用。
在 Go 语言中,数组(如 [5]int)和切片([]int)是两种不同的类型:数组长度固定、属于值类型;而切片是动态长度的引用类型,底层指向数组,且 sort.Ints() 的函数签名明确要求参数为 []int:
func Ints(a []int)
因此,当你声明 var arr [5]int 后,arr 是一个数组类型,直接传入 sort.Ints(arr) 会导致编译错误:
cannot use arr (type [5]int) as type []int in argument to sort.Ints
✅ 正确做法是使用切片操作符 [:] 将整个数组转换为对应长度的切片:
package main
import (
"fmt"
"sort"
)
func main() {
var arr [5]int
fmt.Println("Enter 5 elements:")
for i := 0; i < 5; i++ {
fmt.Scanf("%d", &arr[i])
}
sort.Ints(arr[:]) // ✅ 关键修复:arr[:] → []int
fmt.Println("Sorted array:", arr)
}⚠️ 注意事项:
- arr[:] 创建的是一个指向原数组底层数组的切片,因此 sort.Ints() 的排序会原地修改原数组内容;
- 若需保留原始顺序,应先复制为切片再排序,例如:slice := append([]int(nil), arr[:]...);
- 对于动态长度数据,建议直接使用切片(如 arr := make([]int, 5)),避免数组-切片转换的困扰;
- sort.Ints() 使用优化的内省排序(introsort),时间复杂度为 O(n log n),适用于大多数场景。
总结:Go 强类型系统要求严格匹配参数类型,理解数组与切片的本质区别,并熟练运用 [:] 切片语法,是正确使用标准库排序功能的关键基础。


















