PriorityGroup()和Priority()两个方法的异同
来源:5-22 使用Postman来测试web接口-Postman核心功能概述
慕娘5059038
2019-06-25
在代码中有这样两个方法,PriorityGroup()和Priority(), 这两个方法的作用分别是什么呢?有什么异同?
type Starter interface {
// ...
PriorityGroup() PriorityGroup
Priority() int
}
对Starter的排序,为什么要根据这两个方法的返回值来进行排序呢?
func (s Starters) Less(i, j int) bool {
return s[i].PriorityGroup() > s[j].PriorityGroup() && s[i].Priority() > s[j].Priority()
}
1回答
-
您好!同学,PriorityGroup和Priority用来设置优先级,通过优先级来排序starter的,PriorityGroup是用来分组的,将一批starter作为一个组来管理,在PriorityGroup分组内再按照优先级,那么整体上就是PriorityGroup+Priority作为优先级来排序的。
排序的逻辑:
type Starters []Starter
func (s Starters) Len() int { return len(s) }
func (s Starters) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s Starters) Less(i, j int) bool {
return s[i].PriorityGroup() > s[j].PriorityGroup() && s[i].Priority() > s[j].Priority()
}需要说明的是,这部分功能在重构了,但实际starter注册中还没有用到。本课程中采用的是集中式starter注册,手动排序starter的注册顺序就行;还有一种是分散在代码的各个地方,自动注册的(也就是放到init函数里面),那么就需要指定优先级来保证starter的顺序。本课中涉及到的starter数量不多,集中式管理更好理解和设置,如果项目中starter非常多或者module很多,就要考虑分散式的管理,那么PriorityGroup和Priority就派上用场了。
112019-06-28
相似问题