How to stop goroutine execution on timeout?

I want to stop goroutine execution on timeout. But it seems like it is not working for me. I am using iris framework.
type Response struct { data interface{} status bool } func (s *CicService) Find() (interface{}, bool) { ch := make(chan Response, 1) go func() { time.Sleep(10 * time.Second) fmt.Println("test") fmt.Println("test1") ch <- Response{data: "data", status: true} }() select { case <-ch: fmt.Println("Read from ch") res := <-ch return res.data, res.status case <-time.After(50 * time.Millisecond): return "Timed out", false } }

Output:
Timed out test test1

Expected Output:
Timed out

Can somebody point out what is missing here? It does timeout but still runs goroutine to print test and test1. I just want to stop the execution of goroutine as soon as there is timeout.

Write your answer...

Never miss a post from Chris Gregori, when you sign up for Ednsquare.