package modules import "errors" type MsgQueue struct { queue chan Message 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 Message) return nil } else { close(mq.queue) mq.queue = make(chan Message) return nil } } func (mq *MsgQueue) push(msg Message) bool { mq.queue <- msg return true } func (mq *MsgQueue) pop(wait bool) (Message, error) { if wait == true { if len(mq.queue) == 0 { return Message{}, errors.New("Queue Handler Alert: Queue is Empty") } else { return <-mq.queue, nil } } else { //queue에 데이터가 들어올 때까지 block return <-mq.queue, nil } }