Golang

[Golang] 고언어 fmt 패키지 표준 출력 - Print(), Println(), Printf()

Dev Lilac 2023. 11. 26. 13:09

fmt

표준 입출력 기능은 Go 언어에서 기본 패키지인 fmt에서 제공한다. 패키지를 사용하기 위해서는 import를 통해 사용할 패키지를 불러와야 한다. fmt 패키지는 표준 출력용 함수와 표준 입력용 함수를 제공한다.

import "fmt"

 

 

표준 출력

fmt 패키지는 다음 3가지 표준 출력용 함수를 제공한다.

함수 설명
Print() 함수 입력값들을 출력한다.
Println() 함수 입력값들을 출력하고 개행한다.
Printf() 포맷(format)에 맞도록 입력값들을 출력한다.

 

Print()

Print() 함수는 기본 서식에 맞춰 표준 출력을 한다. Print() 함수는 다음 특징을 가진다.

  • 출력값 사이에 공백(" ")을 삽입하지 않는다.
  • 출력이 끝나면 개행("\n")을 수행하지 않는다.
package main

import "fmt"

func main() {
    var a int = 10
    var b int = 20
    var f float64 = 32799438743.8297

    fmt.Print("a:", a)
    fmt.Print("b:", b)
    fmt.Print("f:", f)
}
// 출력
a:10b:20f:3.27994387438297e+10

 

Println()

Println() 함수는 기본 서식에 맞춰 표준 출력을 하지만 Print() 함수와 차이점이 있다.

  • 출력값 사이에 공백(" ")을 삽입한다.
  • 출력이 끝나면 개행("\n")을 한다.
package main

import "fmt"

func main() {
    var a int = 10
    var b int = 20
    var f float64 = 32799438743.8297

    fmt.Println("a:", a, "b:", b)
    fmt.Println("f:", f)
}
a: 10 b: 20
f: 3.27994387438297e+10
  • 주목할 점이 있다면 f의 출력 값이 3.27994387438297e+10으로 지수 형태로 출력된다는 것이다. 실수 값의 기본 서식이 %f가 아닌 %g이기 때문이다.

 

Printf()

Printf() 함수는 주어진 사용자 서식에 맞춰 입력값을 출력한다. "a: %d, b: %d\n"와 같이 문자열이 출력 서식으로 서식 문자(%d, %f 등)에 입력값들이 들어갈 자리를 직접 지정하여 각 입력값이 해당 자리에 들어가게 된다.

 

Printf() 함수는 다음과 같은 형식으로 사용한다.

Printf(서식 문자열, 인수1, 인수2, ...)

 

서식 문자 표

서식 문자열에 사용되는 서식 문자들은 다음과 같이 구성되어 있다.

서식 설명
%v 데이터 타입에 맞춰서 기본 형태로 출력한다.
%T 데이터 타입을 출력한다.
%t 불리언을 true/false로 출력한다.
%d 10진수 정수 값을 출력한다.
%b 2진수로 출력한다.
%c 유니코드 문자를 출력한다.
%o 8진수로 값을 출력한다.
%O 앞에 8진수임을 표시하는 0o를 붙여서 8진수 값을 출력한다.
%x 16진수로 값을 출력한다. 10 이상의 값을 a-f 소문자로 표현한다.
%X 16진수로 값을 출력한다. 10 이상의 값을 A-F 대문자로 표현한다.
%e %E 실수 값을 지수 형태로 출력한다.
%f %F 실수 값을 지수 형태가 아닌 실수 값을 그대로 출력한다.
%g %G 값이 큰 실수 값은 지수 형태, 작은 실수 값은 실수 값 그대로 출력한다.
%s 문자열을 출력한다.
%q 특수 문자 기능을 동작하지 않고 문자열 그대로 출력한다.
%p 메모리 주소값을 출력한다.

 

사용 예제

package main

import "fmt"

func main() {
    var a int = 10
    var b int = 20
    var f float64 = 32799438743.8297

    fmt.Printf("a: %d b: %d\n", a, b)
    fmt.Printf("f: %f", f)
}
// 출력
a: 10 b: 20
f: 32799438743.829700
  • \n은 개행 처리를 하는 특수 문자이다.
  • Printf() 함수는 출력이 끝난 뒤 자동으로 개행을 수행하지 않는다.
  • 실수값을 %f 서식 문자로 출력하면 지수 표현이 아닌 실수 형태 그대로 출력된다.

 

최소 출력 너비 지정

서식 문자를 이용해 출력 너비를 지정하고, 오른쪽 정렬, 0으로 빈칸 채우기, 왼쪽 정렬 등을 수행할 수 있다.

package main

import "fmt"

func main() {
    var a int = 123
    var b int = 456
    var c int = 123456789

    // 최소 너비 지정
    fmt.Printf("%5d, %5d\n", a, b)		// 오른쪽 정렬(공백으로 채움)
    fmt.Printf("%05d, %05d\n", a, b)	// 오른쪽 정렬(0으로 채움)
    fmt.Printf("%-5d, %-5d\n", a, b)	// 왼쪽 정렬

    // 최소 너비 범위를 벗어난 경우
    fmt.Printf("%5d, %5d\n", c, c)		// 오른쪽 정렬(공백으로 채움)
    fmt.Printf("%05d, %05d\n", c, c)	// 오른쪽 정렬(0으로 채움)
    fmt.Printf("%-5d, %-5d\n", c, c)	// 왼쪽 정렬
}
  123,   456
00123, 00456
123  , 456
123456789, 123456789
123456789, 123456789
123456789, 123456789

최소 너비보다 긴 값의 경우 지정한 최소 너비를 무시하고 출력한다.

 

특수 문자 출력

앞서 개행 문자인 "\n"과 같이 특수한 목적을 가진 다양한 문자들이 존재한다.

특수 문자 설명
\n 줄바꿈을 수행한다.
\t 탭을 삽입한다.
\\ \ 자체를 출력한다.
\" "를 출력한다. ex) "\""

 

package main

import "fmt"

func main() {
    str := "Hello\tGo\tWorld\n\"Go\"\tis\tAwesome!\n"

    fmt.Print(str)
    fmt.Printf("%s", str)
    fmt.Printf("%q", str)
}
// 출력
Hello   Go      World
"Go"    is      Awesome!
Hello   Go      World
"Go"    is      Awesome!
"Hello\tGo\tWorld\n\"Go\"\tis\tAwesome!\n"

 

 

참고 서적

Tucker의 Go 언어 프로그래밍 - 공봉식님 지음