버퍼가없는 채널을 만드는 기능이 있습니다. 이 함수는 계속해서 해당 채널에 쓰는 몇 가지 다른 동시 익명 함수를 작성합니다. 그런 다음 함수는 채널에서 입력을 기다린 다음 값을 반환합니다.익명의 기능이 골란에서 영원히 채널에서 대기하면 어떻게됩니까?
전체 기능 (예 푸) "죽은"임에도 불구하고,
package main
import (
"time"
"fmt"
"strconv"
"math/rand"
)
func main() {
for{
text := foo()
fmt.Println(text)
time.Sleep(time.Second)
}
}
func foo() string {
ch := make(chan string)
for i := 0; i < 10; i++ {
// Create some threads
go func(i int) {
time.Sleep(time.Duration(rand.Intn(1000))*time.Millisecond)
ch <- strconv.Itoa(i)
}(i)
}
return <- ch
}
무엇 여전히 채널에 대기중인 익명 함수로 발생하는 아래의 예를 참조하십시오?
그들은 쓰레기로 수집 될 것인가, 아니면 지나가기 전에 필자의 마지막 메시지를 보내려는 필사적 인 시도로 내 컴퓨터 메모리의 림보를 영원히 방황 할 것인가?
채널을 닫을 필요가 없습니다. 쓰기에서 채널을 사용하는 많은 기능으로 인해 할 수 없다면 제어 채널을 설정해야합니다. –
나는 이것이 피할 수 있음을 안다. 그러나 나는 그렇게하지 않을 것이지만, 어떤 일이 일어나는지 알기 위해서다. 또 하나의 측면은 이것이 나쁜지 아닌지에 관한 것이며, 나는 정직하게도 그에 대한 대답이 없습니다. – Eric
채널에 10 개의 값을 쓸 때 코드가 깨지지 만 처음에는 값을 읽었을뿐입니다. 적절한 테스트를 받으려면 모든 값을 읽어야합니다. –