Go file Write하는 방법 정리

임태빈·2022년 1월 3일
0

go

목록 보기
2/13

Go를 활용해서 file Write하는 방법에 대해 잘 몰라서 삽질을 하게 되었습니다.
그래서 다른 분들은 이런일 이 없도록 내용 공유를 하려고 합니다.

Go에서는 다음과 같은 함수들을 활용해 파일을 열거나 만들 수 있습니다.

os.OpenFile() # 파일 플래그, 파일 모드를 지정하여 파일 열기가 가능해집니다.
os.Open() # 파일을 읽는 것을 목적으로 열립니다.
os.Create() # 명명된 파일 생성 또는 잘라냅니다.
os.Truncate() # 명명된 파일을 잘라냅니다.

OpenFile의 자세한 내용은 여기를 참고해 주세요:)

파일을 Write하는 방법을 먼저 알아보고 기존에 작성한 파일에 텍스트를 append 하는 것에 대해 알아보겠습니다.

먼저 파일을 작성하는 방법에 경우 파일을 열거나 write해서 작성하는것에 대해 알아보겠습니다.

파일을 작성하는 방법은 여러가지가 있으며 여기를 참고해 주세요:)

저는 ioutil.WriteFile(), bufio.NewWriter()을 사용해서 만들어보도록 하겠습니다.

package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	b := []byte("Data to write5\n")

	f, err := os.Create("test1.txt")
	check(err)
	w := bufio.NewWriter(f)
	n, err := w.WriteString(string(b))
	check(err)
	fmt.Printf("wrote %d bytes\n", n)
	w.Flush()

	err = ioutil.WriteFile("test2.txt", b, 0644)
	check(err)
}

위 코드를 입력하신다면 test1.txt,test2.txt를 만들어집니다.
코드에 대해 간단하게 설명드리겠습니다. 파일 생성을 위해 os.Create를 활용했습니다. 이를 통해 bufio는 파일을 작성할 수 있습니다.
ioutil에 경우 os.Open 등을 사용하지 않고 파일명,입력할 바이너리 데이터, 모드만 입력해준다면 Write 할 수 있습니다.
✻ ps.os.OpenFile로도 파일 생성이 가능합니다:)

파일을 작성하는 방법에 대해 알아봤으니 append하는 방법에 대해서도 작성해보겠습니다.
append를 하는 방법에 경우 제가 찾아낸 것은 두 가지가 있습니다.
첫번째 방법은 os.File에서 제공해주는 seek를 통해 맨 마지막자리로 이동해서 끝자리부터 시작해서 Write를 해주는 것입니다.

package main

import (
	"os"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	b := []byte("Data to write5\n")
	f, err := os.OpenFile("./hello2.txt", os.O_RDWR, 0755)
	f.Seek(0, 2)
	defer f.Close()
	check(err)
	_, err = f.Write(b)
	check(err)
}

두번째 방법은 os.OpenFile에서 os.O_APPEND flag모드를 설정해주는 것입니다.

package main

import (
	"os"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	b := []byte("Data to write4\n")
	f, err := os.OpenFile("./hello2.txt", os.O_APPEND|os.O_RDWR, 0755)
	defer f.Close()
	check(err)
	_, err = f.Write(b)
	check(err)
}

두가지 방법 모두 OpenFile을 사용하며 os.O_RDWR를 꼭 추가해줘야만이 append를 할 수 있습니다.

Go를 활용한 파일 Write에 대해 간단하게 정리해 보았습니다.

profile
golang과 서버 개발을 하고 있는 개발자입니다.

0개의 댓글