|
- package common
-
- import (
- "time"
- )
-
- func SafeSendBool(ch chan bool, value bool) (closed bool) {
- defer func() {
- // Recover from panic if one occured. A panic would mean the channel was closed.
- if recover() != nil {
- closed = true
- }
- }()
-
- // This will panic if the channel is closed.
- ch <- value
-
- // If the code reaches here, then the channel was not closed.
- return false
- }
-
- func SafeSendString(ch chan string, value string) (closed bool) {
- defer func() {
- // Recover from panic if one occured. A panic would mean the channel was closed.
- if recover() != nil {
- closed = true
- }
- }()
-
- // This will panic if the channel is closed.
- ch <- value
-
- // If the code reaches here, then the channel was not closed.
- return false
- }
-
- // SafeSendStringTimeout send, return true, else return false
- func SafeSendStringTimeout(ch chan string, value string, timeout int) (closed bool) {
- defer func() {
- // Recover from panic if one occured. A panic would mean the channel was closed.
- if recover() != nil {
- closed = false
- }
- }()
-
- // This will panic if the channel is closed.
- select {
- case ch <- value:
- return true
- case <-time.After(time.Duration(timeout) * time.Second):
- return false
- }
- }
|