Go 언어 14강 - 파일 읽기/쓰기와 버퍼 처리

 

📘 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는 간단한 파일 처리부터 효율적인 라인 처리까지 기본 패키지로 충분하다!"