Skip to content

Instantly share code, notes, and snippets.

@shazow
Last active August 29, 2015 14:16
Show Gist options
  • Save shazow/6dd544b9b17e69f4cd77 to your computer and use it in GitHub Desktop.
Save shazow/6dd544b9b17e69f4cd77 to your computer and use it in GitHub Desktop.
Go pattern? Search buffered chan
// This is getting out of hand, probably a bad idea.
func (c *Client) searchBuffer(command string) (message *irc.Message, err error) {
buffer := make(chan *irc.Message, cap(c.buffer))
Fill:
for {
select {
case message = <-c.buffer:
if message.Command == command {
break Fill
}
// Put message back in our temporary buffer
select {
case buffer <- message:
default:
err = ErrBufferExceeded
}
default:
break Fill
}
}
close(buffer)
for m := range buffer {
select {
case c.buffer <- m:
default:
err = ErrBufferExceeded
return
}
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment