가장 빨리 만나는 Go 언어 Unit 50.4 기본 입출력 함수 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

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


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




기본 입출력 함수 사용하기

이번에는 기본 입출력 함수와 입출력 인터페이스를 함께 사용해보겠습니다.

package main

import (
	"fmt"
	"strings"
)

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

	var s1, s2 string
	n, _ := fmt.Fscanf(r, "%s %s", &s1, &s2) // 형식을 지정하여 읽기 인스턴스 r에서
                                             // 문자열 읽기

	fmt.Println("입력 개수:", n)             // 입력 개수: 2
	fmt.Println(s1)                          // Hello,
	fmt.Println(s2)                          // world!
}

fmt.Fscanf 함수는 file 인스턴스뿐만 아니라 io.Reader 인터페이스를 따르는 모든 인스턴스를 사용할 수 있습니다. 따라서 문자열로 만든 io.Reader도 사용할 수 있습니다. 여기서는 strings.NewReader 함수로 만든 io.Reader에서 fmt.Fscanf 함수로 형식에 맞게 입력을 받습니다.

다음은 bufio와 기본 입출력 함수를 사용하여 파일에 값을 저장합니다.

package main

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

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 함수가 끝나기 직전에 파일을 닫음

	w := bufio.NewWriter(file)                  // file로 io.Writer 인터페이스를 따르는
                                                // 쓰기 인스턴스 w 생성
	fmt.Fprintf(w, "%d,%f,%s", 1, 1.1, "Hello") // 형식을 지정하여 쓰기 인스턴스 w의 버퍼에
                                                // 1, 1.1, Hello 저장
	w.Flush()                                   // 버퍼의 내용을 파일에 저장
}

bufio.NewWriter 함수로 만든 쓰기 인스턴스에 fmt.Fprintf 함수로 형식을 설정하여 값을 출력하고, Flush 함수로 버퍼의 내용을 파일에 저장합니다. 이렇게 하면 hello.txt 파일에 1,1.100000,Hello가 저장됩니다.

이처럼 io.Reader, io.Writer 인터페이스만 맞으면 어디든 활용할 수 있습니다. Go 언어로 프로그래밍할 때는 이러한 인터페이스 사용법에 익숙해지는 것이 좋습니다.

그림 50-3 io.Reader, io.Writer 인터페이스는 다양한 패키지에서 사용


저작권 안내

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

Published

2015-06-01