From 30d7a67d28ebd8240f55abdd3ed80b9e25e46983 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Fri, 27 Apr 2018 17:25:30 +0800 Subject: [PATCH] =?UTF-8?q?ch2-6:=20=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch2-cgo/ch2-06-qsort.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ch2-cgo/ch2-06-qsort.md b/ch2-cgo/ch2-06-qsort.md index 5ad1c9b..bd1fbe0 100644 --- a/ch2-cgo/ch2-06-qsort.md +++ b/ch2-cgo/ch2-06-qsort.md @@ -331,6 +331,27 @@ func Slice(slice interface{}, less func(a, b int) bool) { ``` 首先需要判断传入的接口类型必须是切片类型。然后通过反射获取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`被修改,我们进行了全局加锁。 因此目前版本的qsort.Slice函数是无法并发执行的,读者可以自己尝试改进这个限制。