입출력 인터페이스 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

문자열을 파일로 저장하기

다음은 strings 패키지에서 제공하는 입출력 인터페이스 함수입니다.

  • func NewReader(s string) *Reader: 문자열로 io.Reader 인터페이스를 따르는 읽기 인스턴스를 생성합니다.

다음은 bufio 패키지에서 제공하는 입출력 인터페이스 함수입니다.

  • func (b *Writer) ReadFrom(r io.Reader) (n int64, err error): io.Reader의 데이터를 읽어서 io.Writer에 저장

이번에는 문자열을 io.Reader 인터페이스로 만든 뒤 파일에 저장해보겠습니다.

package main

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

func main() {
	file, err := os.OpenFile(
		"hello.txt",
		os.O_CREATE|os.O_RDWR|os.O_TRUNC, // 파일이 없으면 생성,
                                                  // 읽기/쓰기, 파일을 연 뒤 내용 삭제
		os.FileMode(0644))                // 파일 권한은 644
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close() // main 함수가 끝나기 직전에 파일을 닫음

	s := "Hello, world!"
	r := strings.NewReader(s) // 문자열로 io.Reader 인터페이스를 따르는
                                  // 읽기 인스턴스 r 생성

	w := bufio.NewWriter(file) // io.Writer 인터페이스를 따르는 file로
                                   // io.Writer 인터페이스를 따르는 쓰기 인스턴스 w 생성
	w.ReadFrom(r)              // 읽기 인스턴스 r에서 데이터를 읽어서 w의 버퍼에 저장
	w.Flush()                  // 버퍼의 내용을 파일에 저장
}

strings.NewReader 함수를 사용하면 문자열로 io.Reader 인터페이스를 따르는 읽기 인스턴스를 만들 수 있습니다. 그리고 w.ReadFrom(r)처럼 io.Readerio.Writer로 가져올 수 있습니다. 데이터를 가져온 뒤에는 Flush 메서드를 사용하여 버퍼의 내용을 파일에 저장합니다.

다음과 같이 io.Copy 함수를 사용하면 io.Reader의 데이터를 io.Writer로 복사할 수 있습니다. 앞의 예제와 마찬가지로 문자열을 파일에 저장합니다.

  • func Copy(dst Writer, src Reader) (written int64, err error): io.Reader를 io.Writer로 복사
w := bufio.NewWriter(file)
io.Copy(w, r)
w.Flush()

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015