两个例程在Channel中接收到一个数据

Hello i learn about go routine and channel. I do some experiment with channel, i send a data over channel and try to catch it in 2 functions. But my second function not run

Here is my code :

package main

import (
    "fmt"
    "os"
    "time"
)

func timeout(duration int, ch chan<- bool) {
    time.AfterFunc(time.Duration(duration)*time.Second, func() {
        ch <- true
    })
}

func watcher(duration int, ch <-chan bool) {
    <-ch
    fmt.Println("
Timeout! no Answer after", duration, "seconds")
    os.Exit(0)
}

func watcher2(duration int, ch <-chan bool) {
    <-ch
    fmt.Println("This is watcher 2 as a second receiver")
}

func main() {
    var data = make(chan bool)
    var duration = 5

    go timeout(duration, data)
    go watcher(duration, data)
    go watcher2(duration, data)

    var input string
    fmt.Print("What is 725/25 ? ")
    fmt.Scan(&input)

    if input == "29" {
        fmt.Println("Correct")
    } else {
        fmt.Println("Wrong!")
    }
}

Can you tell me some explanation about it? Thank you

As @Andy Schweig mentioned, you can pull from Go channel only once. If you still want to receive message twice, you can use Observer design pattern:

import "fmt"

type Observer interface {
    Notify(message string)
}

type Watcher struct {
    name string
}

func (w Watcher) Notify(message string) {
    fmt.Printf("Watcher %s got message %s
", w.name, message)
}

var watchers =  [...]Watcher {{name: "Watcher 1"}, {name: "Watcher 2"}}
var c = make(chan string)

func notifier() {

    var message string
    for {
        // Messaged pulled only once
        message = <- c

        // But all watchers still receive it
        for _, w := range watchers {
            w.Notify(message)
        }
    }
}

func main() {
    go notifier()

    c <- "hello"
    c <- "how are you?"
}

The channel you declared can only deal with one receiver. By default channels are unbuffered, meaning that they will only accept sends if there is a corresponding receiver to receive the sent value. Whereas a buffered channel accept a limited number of values without a corresponding receiver for those values. If you are looking to inject multiple input and its subsequent receive then you need declare your channel as buffered channel.

ch := make(chan bool, n) //n being the number of items to buffer