I think need to close errCh, resCh
On Thu, May 22, 2025 at 1:44 PM [email protected] <[email protected]>
wrote:
> hi,
>
> I do not seem to to get this one to not panic, and do not understand why
> yet.
>
> This code gets the names of files using shell globbing , so go run
> testchannels.go dir/*
>
> This gets the name and size info of all 1000 files in the dire, but
> panics at the end with a deadlock:
>
> fatal error: all goroutines are asleep - deadlock!
>
> goroutine 1 [select]:
> main.run({0xc000118018, 0x3e8, 0x57f308?})
> /pathtestchannels.go:44 +0x278
> main.main()
> /path/testchannels.go:15 +0x66
> exit status 2
>
> I do not seem to be able to find my mistake. Any hints appreciated ;-).
>
> package main
>
> import (
> "flag"
> "fmt"
> "os"
> "sync"
> )
>
> func main() {
> flag.Parse()
>
> files := flag.Args()
>
> run(files)
>
> }
>
> func run(files []string) {
> errCh := make(chan error, 10)
> resCh := make(chan string, 10)
> doneCh := make(chan struct{})
> wg := sync.WaitGroup{}
>
> for _, file := range files {
> wg.Add(1)
> go func(file string) {
> defer wg.Done()
> f, err := os.Stat(file)
> if err != nil {
> errCh <- fmt.Errorf("could not stat %s:
> %w\n", file, err)
> }
> resCh <- fmt.Sprintf("name: %s\t size: %d",
> f.Name(), f.Size())
>
> }(file)
> }
>
> go func() {
> wg.Wait()
> close(doneCh)
> }()
>
> for {
> select {
> case err := <-errCh:
> fmt.Println(err)
> case data := <-resCh:
> fmt.Println("from result channel: ", data)
> }
> }
> }
>
>
> regards,
>
> Natxo
>
> --
> 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 [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/golang-nuts/49fb8d6d-9db7-4f62-ab34-8eefdb6e8ad9n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/49fb8d6d-9db7-4f62-ab34-8eefdb6e8ad9n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/CAN1Sb7wvx8x7T8e1mX%2B3dk27ZJ04i4jjjTGOR7s5QHYcshqERA%40mail.gmail.com.