[Go] fmt vs bufio in Go

Hojun Song ·2023년 9월 19일
0

fmt vs bufio in Go

Go의 표준 라이브러리 내의 fmtbufio는 I/O 작업을 지원하는 패키지이다. 두 패키지는 각각 다음과 같은 특징과 사용 사례를 가집니다.

fmt

  • 기본적인 I/O

    • fmt는 기본적인 입출력 작업을 위한 함수들을 제공합니다.
    • 특히 문자열 포매팅에 초점을 맞추고 있습니다.
  • 간단한 사용

    • fmt.Println(), fmt.Print(), fmt.Printf(), fmt.Scan(), fmt.Scanln() 등의 함수를 포함하여 간단한 I/O 작업을 수행합니다.
  • 포맷팅

    • PrintfSprintf와 같은 함수들로 문자열 포맷팅을 제공합니다.

bufio

  • 버퍼링된 I/O

    • bufio는 버퍼링된 입출력을 제공합니다.
    • 큰 데이터 스트림을 효율적으로 처리할 때 유용합니다.
  • 텍스트 스캔

    • Scanner는 텍스트를 토큰으로 분리하는데 유용하게 사용됩니다.
    • 기본적으로 줄 단위로 입력을 읽지만, 사용자 정의 분리 함수를 제공하여 다른 방식으로 텍스트를 스캔할 수 있습니다.
  • 버퍼링된 Reader와 Writer

    • bufio.Readerbufio.Writer는 버퍼링된 I/O 작업을 위한 여러 메서드를 제공합니다.
    • 예를 들면, ReadBytes, ReadString, WriteString 등이 있습니다.

요약

fmt는 기본적이며 포맷팅에 중점을 둔 입출력 작업에 적합합니다. 반면, bufio는 효율적인 버퍼링된 I/O 작업과 텍스트 스캔 기능에 초점을 맞추고 있습니다. 어떤 패키지를 사용할지는 작업의 요구 사항과 성격에 따라 결정됩니다.

프로그래머스 0단계

문자열 출력하기

fmt만 사용한 경우

package main

import (
	"fmt"
)

func main() {
	var str string
	fmt.Scan(&str)
	fmt.Println(str)

fmt, os, bufio를 사용한 경우

package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	str, _ := reader.ReadString('\n')
	fmt.Print(str)
}

fmt와 os만을 사용한 경우

package main

import (
	"fmt"
	"os"
)

func main() {
	// 버퍼를 생성합니다. 최대 1,000,000 크기를 가정하였습니다.
	buf := make([]byte, 1_000_000)
	n, _ := os.Stdin.Read(buf)

	// 실제로 읽은 바이트만큼 슬라이스를 조절합니다.
	str := string(buf[:n])

	fmt.Print(str)
}
profile
A web backend developer, let's share information and problem solving!

0개의 댓글