Golang语言为结构体排序

时间:2022-05-06
本文章向大家介绍Golang语言为结构体排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有很多的初学者可能对简单的数据的排序可以解决,一旦遇到复制结构的时候可能就束手无策了,今天给大家简单讲解下Go语言中结构体的排序。代码如下,代码是网上给大家找的一个例子,下面代码简单明了;后面大家如果遇到问题例如再上篇文章给大家讲过的并发安全的map的例子,可以增加个排序。

注:下面的代码仅仅是思路,实际项目中切忌map是类型不安全的,如果在高并发下,程序多数会直接挂掉。

package main



import (

        "fmt"

        "io/ioutil"

        "sort"

        "time"

)



type info struct {

        Name string

        Time time.Time

}

type newlist []*info



func main() {

        l, e := getFilelist("./")

        if e != nil {

                fmt.Println(e)

        }
 //调用标准库的sort.Sort必须要先实现Len(),Less(),Swap() 三个方法.

        sort.Sort(newlist(l))  

        for _, v := range l {

                fmt.Println("文件名:", v.Name, "修改时间:", v.Time.Unix())

        }

}



func getFilelist(path string) ([]*info, error) {

        l, err := ioutil.ReadDir(path)

        if err != nil {

                return []*info{}, err

        }

        var list []*info

        for _, v := range l {

                list = append(list, &info{v.Name(), v.ModTime()})

        }

        return list, nil

}



func (I newlist) Len() int {

        return len(I)

}

func (I newlist) Less(i, j int) bool {

        return I[i].Time.Unix() < I[j].Time.Unix()

}

func (I newlist) Swap(i, j int) {

        I[i], I[j] = I[j], I[i]

}