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回答

枫荇

2019-06-27

您好!同学,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就派上用场了。

1
1
慕娘5059038
好的,谢谢老师
2019-06-28
共1条回复

仿微信抢红包 Golang实战多版本抢红包系统

Golang红包系统单体版+并发版+分布式+微服务版,四大金装版、超值必修课

582 学习 · 159 问题

查看课程