Use 切片.反转 https://pkg.go.dev/slices@master#Reverse在 Go 1.21 或更高版本中:
slices.Reverse(s)
Go 1.20 及更早版本的答案:
标准库没有用于反转切片的内置函数。使用 for 循环反转切片:
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
在 Go 1.18 或更高版本中使用类型参数编写通用反向函数:
func reverse[S ~[]E, E any](s S) {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
}
Use 反射交换器 https://pkg.go.dev/reflect#Swapper在 Go 1.8 或更高版本中编写一个可处理任意切片类型的函数:
func reverse(s interface{}) {
n := reflect.ValueOf(s).Len()
swap := reflect.Swapper(s)
for i, j := 0, n-1; i < j; i, j = i+1, j-1 {
swap(i, j)
}
}
该答案中的函数就地反转切片。如果不想修改原始切片,复制切片 https://github.com/golang/go/wiki/SliceTricks#copy在翻转切片之前。