# 在Golang中实现一个基本的注册启动模块

基本思想:将某个模块的启动逻辑也封装在该模块内。需要的方法至少有:注册方法、启动方法和优雅退出。

type Government interface {
   
	Register(Department) error
	Start() error
	GracefulShutdown() error
}

type Department interface {
   
	Name() string
	Start(ch chan struct{
   }) error
	Secretary
}

type Secretary interface {
   
	Send(mail Mail) error
	Recv() (mail Mail, err error)
}

type Mail interface {
   
	SourceDepartment() string
	DestinationDepartment() string
	Content() interface{
   }
}

Department

​ Department代指每一个模块,每个模块都要实现Deparment的Name()方法和Start()方法,通过为每个模块指定Start()方法可以将每个模块的启动逻辑封装在该模块内,使得模块之间耦合更少。

Government

​ Government是所有模块的控制中心,所有模块在启动时向Government进行注册,Government的启动方法会调用每个模块自己的启动方法,Goverment的GracefulShutdown方法会给每个模块的关闭channel发送一条消息,让他们都停止执行。

Secretary

Secretary用于模块之间通信,每个模块都需要一个Secretary负责在Department之间收发信件。模块间的通信都必须通过Secretary进行,减少模块调用的耦合。

Mail

​ mail是一个封装了模块通信消息的接口,可以根据实际需要添加自己的方法。

下面是一个实现的例子

department_interface.go

package department

const (
	MailBoxCapacity                    int    = 128
)

var (
	DepartmentMailbox map[string]chan Mail
)

type Government interface {
   
	Register(department Department) error
	Start() []error
	GracefulShutdown() error
}

type Department interface {
   
	Name() string
	Start(ch chan struct{
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值