GO에서 파일을 한 줄씩 효율적으로 읽는 방법
특히 파일을 읽고 쓰는 파일 I/O
는 프로그래밍 언어의 일반적인 기능입니다. 종종 파일을 한 줄씩 읽어야합니다. GO는 기본적으로 버퍼링 된 I/O
를 구현하는 bufio
패키지를 제공합니다. bufio
는 특히 텍스트 파일을 읽고 쓰는 데 유용한 유형과 기능을 제공합니다.
패키지 및 필요한 수입품
package main
import(
"fmt"
"bufio"
"log"
"os"
)
GO 표준 라이브러리에서 몇 가지 가져 오기가 필요합니다.
os
- 플랫폼 독립적 인 OS 기능 인터페이스fmt
- 형식화 된I/O
기능 구현log
- -표준 로깅 패키지bufio
- 버퍼링 된I/O
지원
한 줄씩 읽기
파일을 읽기 전에 먼저 파일에 포인터 유형을 반환하는os.Open()
함수를 사용하여 파일을 열어야합니다. 코드 스 니펫에 표시된test.txt
파일은 미리 존재해야합니다 (파일의 경로를 입력하십시오).
bufio.NewScanner(file)
함수는 파일을 통한 읽기를 지원하는 함수가있는 스캐너 유형을 반환합니다.
파일을 한 줄씩 읽으려면 새로운Scanner
-Scan
에서 스캐너를 새로운 토큰 (이 경우 새 줄)과Text
(또는Byte
)는 Scan
이 호출 될 때 생성 된 최신 토큰을 읽습니다.
파일을 읽을 때 오류가 발생하면 새Scanner
에서Err()
메소드를 호출하여 처리 할 수 있습니다. 그러면Scanner
에서 발생한 첫 번째 비 종료 파일 오류가 리턴됩니다.
func main(){
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
fileScanner := bufio.NewScanner(file)
// read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
file.Close()
}
한 줄씩 파일을 읽는 완전한 코드
한 줄씩 파일을 읽는main.go
의 전체 코드는 다음과 같습니다.
다음을 입력해야합니다.
$ go run main.go
터미널에서 프로그램을 실행합니다.
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
fileScanner := bufio.NewScanner(file)
// read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
file.Close()
}
이동 중에Scanner
동작 구성
Scanner
유형에는 SplitFunc
함수를 허용하는 스플릿 기능이있어 스캐너가 주어진 바이트 슬라이스를 어떻게 분할할지 결정합니다. 기본SplitFunc
는 ScanLines
이며, 후행 줄 끝 마커가 제거 된 텍스트의 각 줄을 반환합니다.
예를 들어 아래 코드 스 니펫에 표시된대로 단어를 사용하여 분할 할 수 있습니다.
scanner.Split(bufio.ScanWords) //configure how the scanner behaves