📘 Go 언어 14강 - 파일 읽기/쓰기와 버퍼 처리
이번 시간엔 Go로 파일 입출력을 처리하는 방법을 배웁니다.
간단한 os.WriteFile
부터, bufio
를 활용한 고급 라인 처리까지 연습합니다.
1️⃣ 파일 쓰기 (os.WriteFile)
import "os"
func main() {
data := []byte("안녕하세요, Go!\n파일에 저장됩니다.")
err := os.WriteFile("hello.txt", data, 0644)
if err != nil {
panic(err)
}
}
📎 0644
: 퍼미션 설정 (읽기/쓰기)
2️⃣ 파일 읽기 (os.ReadFile)
content, err := os.ReadFile("hello.txt")
if err != nil {
panic(err)
}
fmt.Println(string(content))
3️⃣ bufio로 라인 단위 읽기
file, err := os.Open("hello.txt")
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println("라인:", scanner.Text())
}
bufio.Scanner
는 메모리를 아끼며 대용량 파일 처리에 유리합니다.
💡 예제 1: 파일에 여러 줄 쓰기
lines := []string{"첫 줄입니다", "두 번째 줄", "마지막 줄"}
file, _ := os.Create("multi.txt")
defer file.Close()
for _, line := range lines {
file.WriteString(line + "\n")
}
💡 예제 2: 한 줄씩 읽고 줄 번호 출력
file, _ := os.Open("multi.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
i := 1
for scanner.Scan() {
fmt.Printf("%d: %s\n", i, scanner.Text())
i++
}
🧠 요약
os.WriteFile
,os.ReadFile
: 간단한 읽기/쓰기 처리bufio.Scanner
: 대용량 파일 처리에 적합os.Create
,os.Open
: 파일 스트림 기반 입출력 가능
한 줄 요약: "Go는 간단한 파일 처리부터 효율적인 라인 처리까지 기본 패키지로 충분하다!"