파일을 라인 단위로 읽는 방법 (Go)
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
bufio.Scanner
를 사용하여 효율적인 라인 단위 파일 읽기를 수행합니다.- 예기치 않은 오류를 방지하기 위해 잠재적인 오류를 적절히 처리합니다.
Scanner.Buffer()
를 사용하여 긴 라인에 맞게 버퍼 크기를 조정합니다.
파일을 라인 단위로 읽는 것은 특히 텍스트 파일이나 로그를 처리할 때 프로그래밍에서 흔히 발생하는 작업입니다. Go에서는 bufio
패키지를 사용하여 이를 효율적으로 달성할 수 있으며, 이 패키지는 버퍼링된 I/O 작업을 제공합니다. 이 문서에서는 Go를 사용하여 파일을 라인 단위로 읽는 과정을 안내합니다.
bufio.Scanner
사용하기
bufio.Scanner
는 텍스트 라인과 같은 데이터를 읽는 데 편리한 도구입니다. 입력값을 읽고 지정된 구분 기호(기본적으로는 줄 바꿈 문자)를 기반으로 토큰으로 분할하므로, 라인 단위로 읽기에 이상적입니다.
다음은 bufio.Scanner
를 사용하여 파일을 라인 단위로 읽는 방법입니다.
package main import ( "bufio" "fmt" "log" "os" ) func main() { // 파일 열기 file, err := os.Open("path/to/your/file.txt") if err != nil { log.Fatalf("파일을 열 수 없습니다: %s", err) } defer file.Close() // 파일에 대한 새 Scanner 생성 scanner := bufio.NewScanner(file) // 각 라인 반복 for scanner.Scan() { line := scanner.Text() // 여기에 라인 처리 fmt.Println(line) } // 스캔 중 오류 확인 if err := scanner.Err(); err != nil { log.Fatalf("파일 읽기 오류: %s", err) } }
이 예시에서:
os.Open
을 사용하여 파일을 엽니다. 이 작업 중에 발생할 수 있는 오류를 처리하는 것이 중요합니다.- 파일에 대한
bufio.Scanner
가 생성됩니다. 스캐너는 기본적으로 입력을 라인으로 분할합니다. scanner.Scan()
을 사용하여 각 라인을 반복합니다.scanner.Text()
메서드는 현재 라인을 문자열로 반환합니다.- 루프 후
scanner.Err()
를 사용하여 스캔 프로세스 중에 오류가 발생했는지 확인합니다.
긴 라인 처리하기
bufio.Scanner
에는 기본 버퍼 크기가 있으며, 이는 매우 긴 라인에는 충분하지 않을 수 있습니다. 64KB보다 긴 라인이 예상되는 경우 Scanner.Buffer
메서드를 사용하여 버퍼 크기를 조정할 수 있습니다.
scanner := bufio.NewScanner(file) buf := make([]byte, 0, 1024*1024) // 1MB 버퍼 scanner.Buffer(buf, 1024*1024)
이렇게 하면 버퍼가 1MB로 설정되어 필요에 따라 더 긴 라인을 수용할 수 있습니다.
결론
Go에서 bufio.Scanner
를 사용하면 파일을 라인 단위로 간단하게 읽을 수 있습니다. 각 라인을 처리하는 간단하고 효율적인 방법을 제공하여 로그 읽기 또는 텍스트 파일 처리와 같은 일반적인 작업을 처리합니다. 잠재적인 오류를 정상적으로 처리하고 비정상적으로 긴 라인이 포함될 수 있는 파일로 작업할 때는 항상 버퍼 크기를 조정해야 합니다.
FAQs
기본적으로 줄 바꿈 문자(\n
)입니다.
Scanner.Buffer()
를 사용하여 버퍼 크기를 늘립니다.
scanner.Err()
를 사용하여 오류를 확인하고 적절하게 처리합니다.
Leapcell은 최고의 Go 프로젝트 호스팅 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다중 언어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포하세요
- 사용량에 대해서만 지불합니다. 요청이나 요금이 없습니다.
최고의 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: $25는 평균 응답 시간 60ms로 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성과 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 없으므로 구축에만 집중하십시오.
문서에서 더 많은 것을 알아보세요!
X에서 팔로우하세요: @LeapcellHQ