什么是在Go中对切片进行分页并避免错误的最佳方法 panic: runtime error: slice bounds out of range
例如,如果我有一个切片
slice := []int{1, 2, 3, 4, 5, 6, 7}
Run Code Online (Sandbox Code Playgroud)
我打电话给
slice[6:10]
Run Code Online (Sandbox Code Playgroud)
我得到了恐慌错误.
我想出了这个:
func paginate(x []int, skip int, size int) []int {
limit := func() int {
if skip+size > len(x) {
return len(x)
} else {
return skip + size
}
}
start := func() int {
if skip > len(x) {
return len(x)
} else {
return skip
}
}
return x[start():limit()]
}
Run Code Online (Sandbox Code Playgroud)
在Go中有更好的方法吗?
谢谢
Ste*_*erg 14
好吧,虽然没有很好的方法,但我认为如果你使用变量而不是函数会更干净.删除else子句时,它看起来也更干净.
func paginate(x []int, skip int, size int) []int {
if skip > len(x) {
skip = len(x)
}
end := skip + size
if end > len(x) {
end = len(x)
}
return x[skip:end]
}
Run Code Online (Sandbox Code Playgroud)
为什么要限制到某个切片类型?
func Paginate(pageNum int, pageSize int, sliceLength int) (int, int) {
start := pageNum * pageSize
if start > sliceLength {
start = sliceLength
}
end := start + pageSize
if end > sliceLength {
end = sliceLength
}
return start, end
}
Run Code Online (Sandbox Code Playgroud)
start, end := Paginate(pageNum, pageSize, len(someSlice))
pagedSlice := someSlice[start:end]
Run Code Online (Sandbox Code Playgroud)