Go语言是一门非常简单优雅的语言,其源码更是其风格标杆。看源码,不仅能学习Go的设计哲学,了解如何调用库函数,同时帮助我们写出更优雅的go代码。
Go源码位于GOROOT目录下的src中。
本文学习1.14.1版本源码库的sort包。该包对外提供的主要功能是排序和搜索。其核心的函数分别是:sort.Sort()与sort.Search()。
1. sort.Sort()
函数定义如下
func Sort(data Interface) {
n := data.Len()
quickSort(data, 0, n, maxDepth(n))
}
Sort函数中调用了quickSort方法,该方法下是排序算法的具体实现,核心策略是根据待排序的数据量,相应调整不同的排序算法,这部分内容不在本文分析内容之中。
对包使用者来说,需要注意的是,Sort的入参是Interface接口,这Interface是什么呢?以下是其在sort.go中的定义。
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with
// index i should sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
可见,Interface是一个接口