Go 언어의 Reader 인터페이스는 읽기 작업을 정의하며, Reader 인터페이스를 구현한 인터페이스에는 읽기 기능이 있습니다. (권장 학습: go)
인터페이스의 정의는 다음과 같습니다.
type Reader interface { Read(p []byte) (n int, err error) }
A 읽기 호출은 최대 len(p) 바이트의 데이터를 버퍼 p로 읽을 수 있습니다.
n은 실제 이번에는 바이트 수만큼 읽습니다. (0 <= n <= len(p))
err은 이 읽기 작업의 오류 보고서를 나타냅니다(있는 경우, 그렇지 않은 경우에는 nil입니다)
bytes read 숫자 n은 len(p)보다 작습니다. 함수 호출 중에 호출 본문은 p의 모든 공간을 사용할 수 있습니다. (이 설명이 무엇을 표현하려는지 모르겠습니다.)
데이터를 읽을 때, len(p)가 충분하지 않더라도(IO 캐시에 데이터가 없는 경우) 읽기 작업은 일반적으로 IO 캐시에 더 많은 데이터가 도착할 때까지 계속 기다리지 않고 가져온 데이터를 직접 반환합니다
읽기 작업에서 오류가 발생하거나 파일 끝이 발생하면 읽은 데이터의 n바이트를 반환하고 err 반환에는 두 가지 작업이 있을 수 있습니다.
이 읽기 작업에서는 n(>0) 및 err (nil이 아님)이 반환됩니다. )
또는 이 읽기 작업은 n(>0)과 nil을 반환하고 다음 호출은 0과 err(non-nil)을 반환합니다
두 작업이 모두 가능하므로 호출자는 항상 err이 nil
인지 먼저 결정하는 대신, 먼저 n>0을 따라 반환된 데이터가 있는지 확인합니다. 예를 들어 특정 호출이 파일 끝에 도달하고 n바이트의 데이터를 읽을 때 Reader의 구현은 다음과 같습니다. 두 가지 방법:
현재 호출은 n과 EOF 오류를 반환합니다.
현재 호출은 n과 nil을 반환하고, 다음 호출은 0과 EOF를 반환합니다.
Read 구현은 0과 nil을 반환해서는 안 됩니다. 즉, 0일 때 nil이 아닌 오류가 반환되어야 하며, 버퍼 공간의 크기가 0이 아닌 경우 호출자는 0과 nil의 반환 값 조합을 무시하고 아무 일도 일어나지 않은 것처럼 처리해야 합니다. 특히 이 반환이 강조됩니다. EOF를 나타내지 않습니다
위 내용은 golang이 블록을 읽을까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!