입출력

김대익·2022년 4월 21일
0

입출력

입출력 표준 라이브러리는 io에 들어있다

fmt.Fprintln, fmt.Fprintf, fmt.Fscanf같은 "fmt패키지의 F로 시작하는 함수들"은
io.Reader/io.Writer를 인자로 받는다.

  • fmt.Fprintln(os.Stdout, s) == fmt.Println(s)
  • fmt.Fprintf(os.Stdout, format, ...) == fmt.Println(format, ...)
  • fmt.Fscanf(os.Stdin, format, ...) == fmt.Scanf(format, ...)

io.Reader/io.Writer를 받으면 표준입출력, 파일, 네트워크에 모두 적용 가능하므로 좋다.


파일 읽기

f, err := os.Open(filename)
if err != nil {
	return err
}
defer f.Close()
var num int
if _, err := fmt.Fscanf(f, "%d\n", &num); err == nil {

}


파일 쓰기

f, err := os.Create(filename)
if err != nil {
	return err
}
defer f.Close()
var num int
if _, err := fmt.Fprintf(f, "%d\n", num); err == nil {
	return err
}

텍스트 리스트 읽고 쓰기

먼저, 문자열 슬라이스를 라인별로 출력하는 함수

func WriteTo(w io.Writer, lines []string) error {
	for _, line := range lines {
    	if _, err := fmt.Fprintln(w, line); err != nil {
        	return err
        }
    }
}

읽기 함수

func ReadFrom(r io.Reader, lines *[]string) error {
	scanner := bufio.NewScanner(r)
    for scanner.Scan() {
    	*lines = append(*lines, scanner.Text())
    }
    if err := scanner.Err(); err != nil {
    	return err
    }
    return nil
}

0개의 댓글