As written above, if that's the main thread, it is guaranteed to freeze in 
a deadlock every time. I don't see a goroutine kicked off, so I'm assuming 
you're trying to run that on the main thread, and you will be 100%, always, 
forever stuck on the `case wch := <- ach {` line.

Channel reads are blocking, if there's nothing in the buffer. You might 
have omitted it for brevity, but so I read that as if it's on the main 
thread for the program. You want goroutines to block while awaiting a 
receivable channel, typically. If you're receiving on the main thread, you 
need to add a default case that will not block.. This is a good explanation 
of the issue: https://golangbyexample.com/select-default-case-go/

On Friday, March 25, 2022 at 1:45:48 PM UTC-5 Ian Lance Taylor wrote:

> On Fri, Mar 25, 2022 at 11:41 AM 袁成若 <a5728...@gmail.com> wrote:
> >
> > I met a problem about etcd watch channel. seems that be closed, but i 
> can not reproduce it.
> >
> > like this:
> >
> > ```
> > for {
> > ach := etcdClientV3.Watch(context.Background(), "/test", 
> clientv3.WithPrefix())
> > for {
> > select {
> > case wch := <- ach {
> > fmt.Println("recv chan")
> > }
> > }
> > }
> > }
> > ```
> > the program print recv chan all the time. but I cannot reproduce it , Is 
> there any way to reproduce it
>
> It sounds like you are describing a problem with the
> https://github.com/etcd-io/etcd/ package. I suggest that you ask
> there.
>
> Ian
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/6c0b5e4b-9959-45cb-a476-fca3a3d2d72dn%40googlegroups.com.

Reply via email to