我想在goroutines之间进行通信并无限期地阻塞主线程

How do i block the the main func and allow goroutines communicate through channels the following code sample throws me an error

0fatal error: all goroutines are asleep - deadlock!

package main

import (
  "fmt"
  "time"
)

func main() {
   ch := make(chan int)

   go func() {
       value := <-ch
       fmt.Print(value) // This never prints!
   }()

   go func() {
       for i := 0; i < 100; i++ {
           time.Sleep(100 * time.Millisecond)
           ch <- i
       }
   }()

   c := make(chan int)
   <-c
}

I think you want to print all value [0:99]. Then you need loop in 1st go routine.

And also, you need to pass signal to break loop

func main() {
    ch := make(chan int)
    stopProgram := make(chan bool)

    go func() {
        for i := 0; i < 100; i++ {
            value := <-ch
            fmt.Println(value)
        }
        // Send signal through stopProgram to stop loop
        stopProgram <- true
    }()

    go func() {
        for i := 0; i < 100; i++ {
            time.Sleep(100 * time.Millisecond)
            ch <- i
        }
    }()

    // your problem will wait here until it get stop signal through channel
    <-stopProgram
}