Go 언어에서는 io.Reader로 매개변수 유형을 수신하는 함수나 메소드를 정의하면 실제로 io.Reader 인터페이스를 구현하는 모든 유형을 허용할 수 있습니다. 따라서 bufio.NewScanner에서 os.File을 매개변수로 사용하는 것은 os.File 유형이 io.Reader 인터페이스를 구현하기 때문입니다. 이는 os.File 유형이 io.Reader 유형을 허용하는 함수 또는 메소드에 매개변수로 전달될 수 있고, io.Reader 메소드가 os.File에 대해 작동하기 위해 함수 또는 메소드 내에서 사용될 수 있음을 의미합니다. 이러한 유연성은 Go 언어의 인터페이스 기능을 반영하여 코드를 더욱 간결하고 재사용 가능하게 만듭니다. 따라서 매개변수 유형이 io.Reader로 선언된 경우에도 bufio.NewScanner에 전달된 매개변수로 os.File을 계속 사용할 수 있습니다.
go를 배우고 bufio.newscanner
를 계속 사용하여 파일 내용을 읽으세요. 이를 위해 다음 코드를 사용합니다:
정의를 보고 (적어도 나에게는) 이상한 점을 발견할 것이라고 생각했는데, 위의 os.open("input.txt")
는 실제로 *os .file
을 반환합니다. code> 및 os.open("input.txt")
实际上返回一个 *os.file
和 bufio.newscanner
期望一个 io。 reader
作为参数。 reader
是一个接口,而 file
io를 기대합니다. reader
를 매개변수로 사용합니다. reader
는 인터페이스인 반면, file
은 해당 인터페이스나 그와 유사한 것(가능한 경우)을 구현하지 않는 구조체입니다.
근데 완전 괜찮은 것 같네요. go 작동 방식에 대해 뭔가 빠졌나요? 저는 C#에 대한 배경 지식이 있고 매개 변수의 유형이 다르기 때문에 컴파일러가 이를 허용해서는 안 되는 것 같습니다. 그렇죠?
그냥 궁금해서 이 질문을 어디에 물어야 할지 모르겠어요.
os.file은 실제로 io.reader 인터페이스를 구현하고 있습니다.
즉, io.reader 인터페이스에서 제공하는 모든 메소드를 동일한 서명으로 구현한다는 의미입니다.
이 특별한 경우에는 다음 방법을 사용하세요.
으아악위 내용은 Go에서는 io.Reader만 허용해야 한다고 정의되어 있는데 bufio.NewScanner에서 *os.File을 매개변수로 사용할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!