기본 논리를 이해하려고 몇 시간을 보냈지만 진전이 없었습니다. 아래 코드는 첫 번째 반복 후 교착 상태를 반환합니다. io.copy
전에 작가를 닫으면 교착 상태는 사라지지만 아무것도 인쇄되지 않습니다(읽기 전에 파이프의 쓰기 끝이 닫혀 있기 때문입니다)
코드 실행 후 발생한 오류입니다
func main() { reader, writer := io.pipe() c := make(chan string) go func() { for i := 0; i < 5; i++ { text := fmt.sprintf("hello %vth time", i+1) c <- text } close(c) }() for msg := range c { msg = fmt.sprintf("\nreceived from channel -> %v\n", msg) go fmt.fprint(writer, msg) io.copy(os.stdout, reader) writer.close() } }
io.copy
不断尝试复制,直到读取器到达 eof(在本例中,当管道关闭时)。由于您在 io.copy
结束后调用 writer.close()
after ,因此 io.copy
리더가 eof에 도달할 때까지(이 경우 파이프가 닫힐 때) 계속 복사를 시도하세요.
writer.close()
이후를 호출하므로 는 결코 eof를 볼 수 없으며 영원히 정지됩니다. close
able 对象只应关闭一次,并且在 close
d 이후에는 사용할 수 없는 것으로 간주됩니다. 재사용해야 하는 경우 새 인스턴스를 생성해야 합니다.
🎜이것은 코드의 실제 개정판입니다: 🎜 으아아아위 내용은 io.쓰기/읽기를 시도할 때 파이프 및 교착 상태의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!