// You can edit this code! // Click here and start typing. package main import ( "errors" "fmt" "log" "sync" "time" ) var ( wg *sync.WaitGroup = &sync.WaitGroup{} mutex *sync.RWMutex = &sync.RWMutex{} deliveryChan chan []byte = make(chan []byte, 1) res []byte = []byte{} ) func Execute() ([]byte, error) { // deliveryChan <- []byte("Hello World") <-time.After(time.Duration(time.Second * 1)) wg.Add(2) go func() { wg.Done() mutex.Lock() defer mutex.Unlock() res = <-deliveryChan }() go func() { wg.Done() time.AfterFunc(time.Second*5, func() { deliveryChan <- nil res = <-deliveryChan }) }() wg.Wait() mutex.RLock() defer mutex.RUnlock() if len(res) <= 0 { return nil, errors.New("Empty Response") } return res, nil } func main() { res, err := Execute() if err != nil { log.Fatal(err.Error()) } fmt.Println("Response: ", string(res)) }