测试代码:

<pre class="brush:go;gutter:true;">package main import ( "encoding/json" "fmt" "math/rand" "strconv" "testing" "time" ) func TestMap(t *testing.T) { num := 100 testdata := initTestData(num) random := rand.New(rand.NewSource(time.Now().UnixNano())) searchs := make([]int, num) for i := 0; i < num; i { searchs[i] = int(random.Int31n(int32(num))) } find := true t.Log(find) start := time.Now() hash := make(map[int]*TestStruct, num) for i := 0; i < num; i { hash[testdata[i].Id] = testdata[i] } for _, item := range searchs { _, has := hash[item] find = has } end := time.Now() t.Log("cost:", end.UnixNano()-start.UnixNano()) start = time.Now() for _, item := range searchs { for _, data := range testdata { if item == data.Id { find = true break } } } end = time.Now() t.Log("cost:", end.UnixNano()-start.UnixNano()) } type TestStruct struct { Id int No string } func initTestData(num int) []*TestStruct { result := make([]*TestStruct, num) for i := 0; i < num; i { result[i] = &TestStruct{ Id: i 1, No: strconv.Itoa(i 1), } } return result } </pre>

  运行测试用例发现数据集比较小的情况下,两种简单的搜索方式基本上没有什么区别,当数据量过大(>1000)时,使用hash进行索引,速度会快很多 (hash和排序后进行快速搜索的效率差不多)