package main
import (
"fmt"
"time"
)
func fib() chan int {
c := make(chan int)
go func() {
c <- 0
c <- 1
n, m := 0, 1
for {
temp := n + m
n = m
m = temp
c <- m // This results in panic, when the channel is closed
}
}()
return c
}
func main() {
start := time.Now()
var lastFib int
c := fib()
for i := 0; i != 1000000; i++ {
lastFib = <-c
}
close(c)
fmt.Println(lastFib)
fmt.Println(time.Now().Sub(start))
}
Auf die idiomatische Art und Weise, wie würde man die Panik in der Goroutine vermeiden, wenn der Kanal geschlossen ist? Oder sollte ich überhaupt vermeiden, close
zu verwenden?Panik vermeiden, wenn versucht wird, einen Wert in einen geschlossenen Kanal einzutragen
Ich bin nicht auf alternative Methoden (wie Verschlüsse), um das gleiche zu erreichen, nur versuchen, ein besseres Verständnis der Kanäle zu bekommen.