04.golang以结构体中某个字段进行排序
2023年1月6日约 409 字大约 1 分钟
04.golang以结构体中某个字段进行排序
我写了一个脚本获取项目在harbor中的tag列表,经过一些curl测试之后,很快就完成了这个脚本的编写。
接下来需要做一些优化方面的考量。
首先一个问题是,返回的结果的顺序好像是随机的,这不是我想要的,通常,当我利用此脚本查项目可用的tag时,我的诉求可能更倾向于获取它最新push的tag,于是,就有了一个在内存中对列表排序的需求。
经过一番搜索,发现官方提供的sort包,直接使用能够对简单的列表进行排序,如果是结构体中的某个字段,则可以用如下方式定义方法:
// Tags harbor项目tag的对象
type Tags struct {
Digest string `json:"digest"`
Name string `json:"name"`
Size int `json:"size"`
Architecture string `json:"architecture"`
Os string `json:"os"`
OsVersion string `json:"os.version"`
DockerVersion string `json:"docker_version"`
Author string `json:"author"`
Created time.Time `json:"created"`
Config struct {
Labels interface{} `json:"labels"`
} `json:"config"`
Signature interface{} `json:"signature"`
Labels []interface{} `json:"labels"`
PushTime time.Time `json:"push_time"`
PullTime time.Time `json:"pull_time"`
}
// 基于时间字段进行排序功能
type tags []Tags
func (s tags) Len() int {
return len(s)
}
func (s tags) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
type ByTime struct {
tags
}
func (b ByTime) Less(i, j int) bool {
return b.tags[i].Created.Before(b.tags[j].Created)
}
在结果返回的地方,直接调用此方法即可实现按时间排序:
sort.Sort(ByTime{data}) // 基于创建时间字段进行排序
网上的文章,如果字段是int类型时的排序方式:golang对自定义类型排序
Powered by Waline v2.9.1