PHpullh
학습 라이브러리/Go/파일 I/O & os 패키지

GO · 파일/IO

파일 I/O & os 패키지

Go의 파일 처리. os, bufio, io 패키지를 활용합니다.

파일/IO중급osbufioReadFileWriteFileScanner

핵심 설명

Go의 파일 처리. os, bufio, io 패키지를 활용합니다.

Go code

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	// 파일 쓰기
	err := os.WriteFile("test.txt",
		[]byte("Hello\nGo\nWorld\n"), 0644)
	if err != nil { panic(err) }

	// 파일 읽기 (전체)
	data, err := os.ReadFile("test.txt")
	if err != nil { panic(err) }
	fmt.Print(string(data))

	// bufio로 줄 단위 읽기 (대용량 파일에 적합)
	f, err := os.Open("test.txt")
	if err != nil { panic(err) }
	defer f.Close()

	scanner := bufio.NewScanner(f)
	lineNum := 0
	for scanner.Scan() {
		lineNum++
		line := scanner.Text()
		fmt.Printf("%d: %s\n", lineNum, line)
	}
	if err := scanner.Err(); err != nil {
		fmt.Println("읽기 에러:", err)
	}

	// 파일 추가 쓰기 (append)
	af, err := os.OpenFile("test.txt",
		os.O_APPEND|os.O_WRONLY, 0644)
	if err != nil { panic(err) }
	defer af.Close()
	fmt.Fprintln(af, "추가된 줄")

	// strings.NewReader — 문자열을 io.Reader로
	r := strings.NewReader("hello world")
	bufReader := bufio.NewReader(r)
	word, _ := bufReader.ReadString(' ')
	fmt.Printf("첫 단어: %q
", strings.TrimSpace(word))

	// 환경 변수
	home := os.Getenv("HOME")
	fmt.Println("홈 디렉토리:", home)

	// 임시 파일
	tmp, err := os.CreateTemp("", "myapp-*.txt")
	if err != nil { panic(err) }
	defer os.Remove(tmp.Name())
	fmt.Println("임시 파일:", tmp.Name())
	tmp.Close()
}

학습 팁

os.ReadFile()은 파일 전체를 메모리에 올립니다. 대용량 파일은 bufio.Scanner로 스트리밍 처리하세요.

주의할 점

os.Open()으로 열린 파일은 읽기 전용입니다. 쓰기가 필요하면 os.OpenFile()os.O_WRONLY/os.O_RDWR 플래그를 사용하세요.

자주 묻는 질문

파일 I/O & os 패키지란 무엇인가요?

Go의 파일 처리. os , bufio , io 패키지를 활용합니다.

파일 I/O & os 패키지 학습 시 주의할 점은 무엇인가요?

os.Open() 으로 열린 파일은 읽기 전용입니다. 쓰기가 필요하면 os.OpenFile() 에 os.O_WRONLY / os.O_RDWR 플래그를 사용하세요.