1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

ch2-6: 完善

This commit is contained in:
chai2010 2018-04-27 17:25:30 +08:00
parent 58fb12e46e
commit 30d7a67d28

View File

@ -331,6 +331,27 @@ func Slice(slice interface{}, less func(a, b int) bool) {
``` ```
首先需要判断传入的接口类型必须是切片类型。然后通过反射获取qsort函数需要的切片信息并调用C语言的qsort函数。 首先需要判断传入的接口类型必须是切片类型。然后通过反射获取qsort函数需要的切片信息并调用C语言的qsort函数。
基于新包装的函数我们可以采用和标准库相似的方式排序切片:
```go
import (
"fmt"
qsort "."
)
func main() {
values := []int64{42, 9, 101, 95, 27, 25}
qsort.Slice(values, func(i, j int) bool {
return values[i] < values[j]
})
fmt.Println(values)
}
```
为了避免在排序过程中,排序数组的上下文信息`go_qsort_compare_info`被修改,我们进行了全局加锁。 为了避免在排序过程中,排序数组的上下文信息`go_qsort_compare_info`被修改,我们进行了全局加锁。
因此目前版本的qsort.Slice函数是无法并发执行的读者可以自己尝试改进这个限制。 因此目前版本的qsort.Slice函数是无法并发执行的读者可以自己尝试改进这个限制。