GoLang - fmt 패키지

dev_swan·2022년 11월 24일

Golang

목록 보기
9/9
post-thumbnail

fmt 패키지

Go 언어의 출력문을 제공하는 기본 내장 패키지입니다.

오늘은 fmt 패키지에 있는 여러 출력문을 (Print, Println, Printf) 좀 더 자세히 알아보도록 하겠습니다.


fmt.Print

값을 그 자리에 출력합니다. HelloWorld를 출력하려고 하면 Hello World 이런식으로 옆에 출력됩니다.

package main

import "fmt"

func main() {
	var num1 int = 10
	var num2 float32 = 3.2
	var num3 complex64 = 2.5 + 8.1i
	var hello string = "Hello, World"
	var boolean bool = true
	var intSlice []int = []int{1, 2, 3}
	var strSlice []string = []string{"Hello","World"}
	var mapping map[int]string = map[int]string{0:"Hello",1:"World",2:""}
	var pointer *int = new(int)
	type Data struct{a,b int}
	var data Data = Data{1,2}
	var i interface{} = 1

	fmt.Print("정수 : ",num1)
	fmt.Print("실수 : ",num2)
	fmt.Print("복소수 : ",num3)
	fmt.Print("문자열 : ",hello)
	fmt.Print("불 : ",boolean)
	fmt.Print("정수 슬라이스 : ",intSlice)
	fmt.Print("문자열 슬라이스 : ",strSlice)
	fmt.Print("맵 : ",mapping)
	fmt.Print("포인터 : ",pointer)
	fmt.Print("구조체 : ",data)
	fmt.Print("인터페이스 : ",i)
}

실행 결과

정수 : 10실수 : 3.2복소수 : (2.5+8.1i)문자열 : Hello, World불 : true정수 슬라이스 : [1 2 3]문자열 슬라이스 : [Hello World]맵 : map[0:Hello 1:World 2:]포인터 : 0xc0000180a8구조체 : {1 2}인터페이스 : 1% 

fmt.Println

값, 또는 여러개의 변수를 모두 각 한줄로 출력됩니다. 또한 모든 형태의 값과 변수를 출력할 수 있으며, 따라서 배열, 슬라이스, 맵, 포인터, 구조체, 인터페이스 등도 간단하게 출력할 수 있습니다.

package main

import "fmt"

func main() {
	var num1 int = 10
	var num2 float32 = 3.2
	var num3 complex64 = 2.5 + 8.1i
	var hello string = "Hello, World"
	var boolean bool = true
	var intSlice []int = []int{1, 2, 3}
	var strSlice []string = []string{"Hello","World"}
	var mapping map[int]string = map[int]string{0:"Hello",1:"World",2:""}
	var pointer *int = new(int)
	type Data struct{a,b int}
	var data Data = Data{1,2}
	var i interface{} = 1

	fmt.Println("정수 : ",num1)
	fmt.Println("실수 : ",num2)
	fmt.Println("복소수 : ",num3)
	fmt.Println("문자열 : ",hello)
	fmt.Println("불 : ",boolean)
	fmt.Println("정수 슬라이스 : ",intSlice)
	fmt.Println("문자열 슬라이스 : ",strSlice)
	fmt.Println("맵 : ",mapping)
	fmt.Println("포인터 : ",pointer)
	fmt.Println("구조체 : ",data)
	fmt.Println("인터페이스 : ",i)
}

실행 결과

정수 :  10
실수 :  3.2
복소수 :  (2.5+8.1i)
문자열 :  Hello, World
불 :  true
정수 슬라이스 :  [1 2 3]
문자열 슬라이스 :  [Hello World]
맵 :  map[0:Hello 1:World 2:]
포인터 :  0xc0000ac008
구조체 :  {1 2}
인터페이스 :  1

fmt.Printf

함수의 첫 매개변수에 출력할 형식을 지정합니다. 그리고 두 번째 매개변수부터는 출력할 값 또는 변수를 나열합니다.

여기서 % (형식지정자)로 값을 출력할 위치와 타입을 정하며 %의 개수와 변수 또는 값의 개수가 같아야 합니다.

형식은 자유자재로 구성할 수 있으며 형식안에 개행 문자를 ( \n )을 넣으면 다음줄로 넘어갑니다.

package main

import "fmt"

func main() {
	var num1 int = 10
	var num2 float32 = 3.2
	var num3 complex64 = 2.5 + 8.1i
	var hello string = "Hello, World"
	var boolean bool = true
	var intSlice []int = []int{1, 2, 3}
	var strSlice []string = []string{"Hello","World"}
	var mapping map[int]string = map[int]string{0:"Hello",1:"World",2:""}
	var pointer *int = new(int)
	type Data struct{a,b int}
	var data Data = Data{1,2}
	var i interface{} = 1

	fmt.Printf("정수 : %d\n",num1)
	fmt.Printf("실수 : %f\n",num2)
	fmt.Printf("복소수 : %f\n",num3)
	fmt.Printf("문자열 : %s\n",hello)
	fmt.Printf("불 : %t\n",boolean)
	fmt.Printf("정수 슬라이스 : %v\n",intSlice)
	fmt.Printf("문자열 슬라이스 : %v\n",strSlice)
	fmt.Printf("맵 : %v\n",mapping)
	fmt.Printf("포인터 : %p\n",pointer)
	fmt.Printf("구조체 : %v\n",data)
	fmt.Printf("인터페이스 : %v\n",i)
}

실행 결과

정수 : 10
실수 : 3.200000
복소수 : (2.500000+8.100000i)
문자열 : Hello, World
불 : true
정수 슬라이스 : [1 2 3]
문자열 슬라이스 : [Hello World]
맵 : map[0:Hello 1:World 2:]
포인터 : 0xc0000ac008
구조체 : {1 2}
인터페이스 : 1

형식 지정자의 종류

  • %v

%v 모든 값을 사용할 수 있는 기본 지정자이며 슬라이스, 맵, 포인터, 구조체, 인터페이스 등에 사용됩니다.

%+v처럼 +를 붙이면 구조체의 필드도 함께 표시합니다.

fmt.Printf("%+\n", data) /** -> {a:1 b:2} */ 
  • %#v

타입과 값을 함께 표현합니다.

fmt.Printf("%#v\n", m)    /** -> map[string]int{"Hello":1} */
fmt.Printf("%#v\n", a)    /** -> []int{1,2,3} */
fmt.Printf("%#v\n", data) /** -> main.Data{a:1, b:2} */
  • %T

타입을 표현합니다.

fmt.Printf("%T\n", num1) /** -> int */ 
fmt.Printf("%T\n", m)    /** -> map[string]int */
fmt.Printf("%T\n", a)    /** -> []int */
fmt.Printf("%T\n", data) /** -> main.Data */
  • % %

아무 값도 표현하지 않고, % 문자를 그대로 출력합니다.

fmt.Printf("%12345%\n") /** -> % */
  • %t

불(bool)을 표현합니다.

fmt.Printf("%t\n",123 == 123) /** -> true */
  • %b

2진수를 표현합니다.

fmt.Printf("%b\n",12345) /** -> 11000000111001 */
  • %d

10진수를 표현합니다.

fmt.Printf("%d\n",12345) /** -> 12345 */
  • %o

8진수를 표현합니다.

fmt.Printf("%o\n",12345) /** -> 30071 */
  • %c

유니코드로 된 문자 하나를 표현합니다.

fmt.Printf("%c %c\n", "a", "가") /** -> a 가 */
  • %q

문자열을 Escape하여 표현합니다.

(Escape란 특수문자를 문자 그대로 표현하기 위해 문자 앞에 역슬래시를 붙이는 작업을 escape라고 합니다.)

fmt.Printf("%q\n", `"Hello, world!" "안녕"`) /** -> "\"Hello, world!\" \"안녕\"" */
  • %x

숫자와 영문 소문자로 16진수를 표현합니다.

var hello string = "Hello, Go!"
fmt.Printf("%x\n", hello) /** -> 48656c6c6f2c20476f21 */
  • %X

숫자와 영문 대문자로 16진수를 표현합니다.

var hello string = "Hello, Go!"
fmt.Printf("%x\n", hello) /** -> 48656C6C6F2C20476F21 */
  • %U

유니코드 형식으로 표현합니다.

fmt.Printf("%U\n", 'u') /** -> U+0075 */
  • %b

실수를 2의 제곱으로 표현합니다.

var num float32 = 3.33
fmt.Printf("%b\n", num) /** -> 13967032p-22 */
  • %e

실수를 지수 표기법으로 표현하고 e는 소문자 입니다.

var num float32 = 3.2
fmt.Printf("%e\n", num) /** -> 3.200000e+00 */
  • %E

실수를 지수 표기법으로 표현하고 E는 대문자입니다.

var num2 float32 = 3.2
fmt.Printf("%E\n", num2) // 3.200000E+00
  • %f

실수를 소수점 형식으로 표현합니다.

var num float32 = 3.2
fmt.Printf("%f\n", num) /** -> 3.200000 */
  • %g

실수에서 지수가 크면 %e, %E로 표현하고, 지수가 작으면 %f, %F로 표현합니다.

fmt.Printf("%g %g\n", 123.12345, 1.3555) /** -> 123.12345 1.3555 */
  • %s

문자열을 표현합니다.

fmt.Printf("%s\n","Hello, Go!") /** -> Hello, Go! */
  • %p

포인터, 패널을 표현하며 앞에 0x가 붙습니다.

var pointer *int = new(int)
fmt.Printf("%p\n",pointer) /** -> 0xc0000180a8 */

Go 언어 공부 GoGo~~! 엌ㅋㅋㅋㅋㅋㅋㅋ

0개의 댓글