You can do this instead:

https://play.golang.org/p/avMIyYlwxbF
On Wed, Oct 24, 2018 at 11:05 AM Sathish VJ <sathis...@gmail.com> wrote:
>
> This is a program where the receiver is asking the sender to close after 
> receiving 1 value.  Using default for the sending (line 34) causes the code 
> to deadlock while even a timeout of a nanosecond causes it to be ok.
> I don't want to time the sending though.  Is there a better option to 
> sequence this code?
> Is using default not an option here at all?
>
> https://play.golang.org/p/30sI9RYJ1Ed
>
> package main
>
> import "fmt"
> //import "time"
>
> var c = make(chan string)
> var quit = make(chan bool)
>
> func main() {
> go fn()
>
> for {
> select {
> case msg, ok := <-c:
> if !ok {
> c = nil
> return
> } else {
> fmt.Println("received: ", msg)
> quit <- true
> }
> }
> }
> }
>
> func fn() {
> for {
> select {
> case <-quit:
> fmt.Println("closin chan c")
> close(c)
> return
> //case <-time.After(time.Nanosecond):  // this is ok
> default:                               // using default causes deadlock
> c <- "Image"
> }
> }
> }
>
>
>
> received:  Image
> fatal error: all goroutines are asleep - deadlock!
>
> goroutine 1 [chan send]:
> main.main()
> /tmp/sandbox497027958/main.go:20 +0x100
>
> goroutine 5 [chan send]:
> main.fn()
> /tmp/sandbox497027958/main.go:35 +0x40
> created by main.main
> /tmp/sandbox497027958/main.go:10 +0x40
>
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to