Go Academy · 강의

파일과 임시 파일 쓰기

WriteFile, OpenFile 플래그 및 임시 파일

레슨 2/413개 단계

파일과 임시 파일 쓰기은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

os.WriteFile

os.WriteFile은 바이트 슬라이스를 파일에 원자적으로 씁니다(잘라낸 후 기록). 작은 파일에 간단한 방법입니다.

err := os.WriteFile("output.txt", []byte("hello"), 0644)
if err != nil { log.Fatal(err) }

os.Create와 defer Close

os.Create는 파일을 생성하거나 잘라내고 *os.File을 반환합니다. 항상 defer로 닫으십시오.

f, err := os.Create("output.txt")
if err != nil { return err }
defer f.Close()
f.WriteString("hello\n")

플래그를 사용하는 os.OpenFile

추가, 없을 때 생성 또는 배타적 생성 모드에는 os.OpenFile을 사용하십시오:

f, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

bufio.Writer

bufio.NewWriter로 파일을 감싸 작은 쓰기를 더 큰 시스템 호출로 묶으십시오. 닫기 전에 Flush()를 호출하여 버퍼링된 데이터를 기록하십시오.

w := bufio.NewWriter(f)
fmt.Fprintf(w, "line %d\n", i)
w.Flush()

fmt.Fprintf

파일을 포함한 모든 io.Writer에 형식이 지정된 텍스트를 쓰십시오:

fmt.Fprintf(f, "name: %s, age: %d\n", name, age)

원자적 파일 쓰기 패턴

임시 파일에 쓴 다음 대상 파일로 이름을 바꾸십시오. POSIX에서는 Rename이 원자적이므로 읽는 쪽에서는 이전 파일이나 새 파일 중 하나만 보며 부분적으로 기록된 파일은 보지 않습니다.

tmp, _ := os.CreateTemp("", "output-*.txt")
tmp.Write(data)
tmp.Close()
os.Rename(tmp.Name(), "output.txt")

os.CreateTemp

os.CreateTemp(dir, pattern)은 dir에 pattern과 일치하는 고유한 이름의 임시 파일을 생성합니다. 열려 있는 파일을 반환합니다. 삭제는 호출자의 책임입니다.

f, err := os.CreateTemp("", "upload-*.json")
defer os.Remove(f.Name()) // cleanup

os.MkdirTemp

os.MkdirTemp은 임시 디렉터리를 생성합니다. 테스트 픽스처 또는 여러 임시 파일을 생성하는 처리 파이프라인에 사용하십시오.

dir, err := os.MkdirTemp("", "batch-*")
defer os.RemoveAll(dir)

파일 권한

Unix 권한 비트(예: 소유자는 rw, 그룹과 다른 사용자는 r인 0644)를 Create 방식 함수의 마지막 인수로 전달하십시오. 프로세스의 umask가 권한을 추가로 제한할 수 있습니다.

쓰기 오류 확인

f.WriteString과 fmt.Fprintf는 오류(디스크 가득 참, 권한 부족)를 반환할 수 있습니다. 오류를 확인하거나 첫 오류를 기록하는 기록기 래퍼를 사용하여 오류를 누적하십시오.

sync.File은 동시성에 안전하지 않음

여러 고루틴이 동일한 *os.File에 동시에 쓰면 쓰기 내용이 서로 섞일 수 있습니다. 뮤텍스 또는 전용 기록기 고루틴 하나를 사용하십시오.

빠른 확인

임시 파일에 쓴 후 이름을 바꾸는 방식이 원자적으로 간주되는 이유는 무엇입니까?

복습: 파일 쓰기

핵심 내용:

  • os.WriteFile: 간단한 덮어쓰기; bufio.Writer: 작은 쓰기를 묶음 처리합니다
  • 원자적 쓰기: 임시 파일 + 이름 바꾸기
  • 임시 리소스에는 os.CreateTemp / os.MkdirTemp를 사용하고, 항상 정리를 defer하십시오
  • 쓰기 오류를 확인하고 동시 쓰기를 동기화하십시오
무료로 시작

AI 튜터와 함께 Go을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
51
레슨
203

자주 묻는 질문

“파일과 임시 파일 쓰기” 강의는 무료인가요?

네 — “파일과 임시 파일 쓰기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“파일과 임시 파일 쓰기”에서 뭘 배우나요?

WriteFile, OpenFile 플래그 및 임시 파일 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“파일과 임시 파일 쓰기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. os와 bufio로 파일 읽기
  2. 파일과 임시 파일 쓰기
  3. JSON 인코딩과 디코딩
  4. JSON과 CSV 스트리밍
← Go Academy(으)로 돌아가기