Go의 표준 라이브러리 내의 fmt
와 bufio
는 I/O 작업을 지원하는 패키지이다. 두 패키지는 각각 다음과 같은 특징과 사용 사례를 가집니다.
기본적인 I/O
fmt
는 기본적인 입출력 작업을 위한 함수들을 제공합니다.간단한 사용
fmt.Println()
, fmt.Print()
, fmt.Printf()
, fmt.Scan()
, fmt.Scanln()
등의 함수를 포함하여 간단한 I/O 작업을 수행합니다.포맷팅
Printf
및 Sprintf
와 같은 함수들로 문자열 포맷팅을 제공합니다.버퍼링된 I/O
bufio
는 버퍼링된 입출력을 제공합니다.텍스트 스캔
Scanner
는 텍스트를 토큰으로 분리하는데 유용하게 사용됩니다.버퍼링된 Reader와 Writer
bufio.Reader
와 bufio.Writer
는 버퍼링된 I/O 작업을 위한 여러 메서드를 제공합니다.ReadBytes
, ReadString
, WriteString
등이 있습니다.fmt
는 기본적이며 포맷팅에 중점을 둔 입출력 작업에 적합합니다. 반면, bufio
는 효율적인 버퍼링된 I/O 작업과 텍스트 스캔 기능에 초점을 맞추고 있습니다. 어떤 패키지를 사용할지는 작업의 요구 사항과 성격에 따라 결정됩니다.
package main
import (
"fmt"
)
func main() {
var str string
fmt.Scan(&str)
fmt.Println(str)
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
str, _ := reader.ReadString('\n')
fmt.Print(str)
}
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)
}