Wie funktioniert channel blocking arbeiten Gehen?

Ich Lerne das Gehen, die Sprache. Hier ist ein Beispiel, das ich begegnet bin. Kann mir bitte jemand erklären, was hier passiert?

package main
import "time"
import "fmt"
func main() {
    c1 := make(chan string)
    c2 := make(chan string)
    go func() {
        time.Sleep(time.Second * 1)
        c1 <- "one"
    }()
    go func() {
        time.Sleep(time.Second * 2)
        c2 <- "two"
    }()
    for i := 0; i < 2; i++ {
      select {
        case msg1 := <-c1:
          fmt.Println("received", msg1)
        case msg2 := <-c2:
          fmt.Println("received", msg2)
        default:
          fmt.Println("Default")
      }
    }
}

Ausgabe:

Default
Default
Program Exited

Wenn ich den Kommentar aus dem "Standard"

//default:
//   fmt.Println("Default")

die Ausgabe wird:

received one
received two
Program exited.

Wie beeinflusst die Anwesenheit des default Fall ändern die Art und Weise Kanal-Blockierung funktioniert?

InformationsquelleAutor user1928896 | 2015-09-12
Schreibe einen Kommentar