package modules import "errors" type MsgQueue struct { queue chan MsgUnit QueueFunc QueueOperate } type QueueOperate interface { //queue 초기화 queue_init() error //queue push push(msg Message) bool //pop message (wait -> busy waiting 여부 결정) pop(wait bool) (Message, error) } func (mq *MsgQueue) queue_init() error { if mq.queue != nil && len(mq.queue) != 0 { return errors.New("Queue Hadlerer Error: Already initialized.") } else if mq.queue == nil { mq.queue = make(chan MsgUnit, 1000) return nil } else { close(mq.queue) mq.queue = make(chan MsgUnit) return nil } } func (mq *MsgQueue) push(msg MsgUnit) bool { mq.queue <- msg return true } func (mq *MsgQueue) pop(wait bool) MsgUnit { if wait == true { if len(mq.queue) == 0 { return nil } else { return <-mq.queue } } else { //queue에 데이터가 들어올 때까지 block return <-mq.queue } }