๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/Go

[Go] ํ˜•์‹์ง€์ •์ž Format ์ •๋ฆฌ(%v,%s,%d ๋“ฑ)

by ์„œ์•„๋ž‘๐Ÿ˜ƒ 2025. 11. 7.

 


Go์˜ ํ˜•์‹ ์ง€์ •์ž(format verbs) ๋Š” fmt ํŒจํ‚ค์ง€(fmt.Printf, fmt.Sprintf, fmt.Errorf ๋“ฑ)์—์„œ ๋ฌธ์ž์—ด ์ถœ๋ ฅ ์‹œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ถ€๋ถ„์€ ๋””๋ฒ„๊น…, ๋กœ๊น…, ๋ฌธ์ž์—ด ํฌ๋งคํŒ… ๋ชจ๋‘์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค๋ฌด์—์„œ๋„ ์ •ํ™•ํžˆ ์ดํ•ดํ•ด๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

Go ํ˜•์‹ ์ง€์ •์ž ์™„์ „ ์ •๋ฆฌ

fmt ํŒจํ‚ค์ง€์˜ ์ฃผ์š” ํ•จ์ˆ˜๋“ค:

ํ•จ์ˆ˜ ์„ค๋ช…
fmt.Printf() ์ฝ˜์†”์— ํ˜•์‹ํ™”๋œ ์ถœ๋ ฅ
fmt.Sprintf() ํ˜•์‹ํ™”๋œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
fmt.Fprintf() writer(io.Writer)์— ํ˜•์‹ํ™”๋œ ์ถœ๋ ฅ
fmt.Errorf() ํ˜•์‹ํ™”๋œ ์—๋Ÿฌ ๋ฌธ์ž์—ด ์ƒ์„ฑ

์ด ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ "%" ๋กœ ์‹œ์ž‘ํ•˜๋Š” format verb(ํ˜•์‹ ์ง€์ •์ž)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ˜•์‹ ์ง€์ •์ž (๊ธฐ๋ณธํ˜•)

ํ˜•์‹ ์„ค๋ช… ์˜ˆ์‹œ ์ถœ๋ ฅ
%v ๊ธฐ๋ณธ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ fmt.Printf("%v", 123) 123
%+v ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋ช… ํฌํ•จ ์ถœ๋ ฅ fmt.Printf("%+v", user) {Name:Alice Age:30}
%#v Go ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ fmt.Printf("%#v", user) main.User{Name:"Alice", Age:30}
%T ๊ฐ’์˜ ํƒ€์ž… ์ถœ๋ ฅ fmt.Printf("%T", 123) int
%% % ๋ฌธ์ž ์ž์ฒด ์ถœ๋ ฅ fmt.Printf("%%") %

์ •์ˆ˜ ํƒ€์ž…

ํ˜•์‹ ์„ค๋ช… ์˜ˆ์‹œ ์ถœ๋ ฅ
%d 10์ง„์ˆ˜ fmt.Printf("%d", 255) 255
%b 2์ง„์ˆ˜ fmt.Printf("%b", 255) 11111111
%o 8์ง„์ˆ˜ fmt.Printf("%o", 255) 377
%x 16์ง„์ˆ˜(์†Œ๋ฌธ์ž) fmt.Printf("%x", 255) ff
%X 16์ง„์ˆ˜(๋Œ€๋ฌธ์ž) fmt.Printf("%X", 255) FF
%c Unicode ์ฝ”๋“œ ํฌ์ธํŠธ๋ฅผ ๋ฌธ์ž๋กœ ์ถœ๋ ฅ fmt.Printf("%c", 65) A
%U Unicode ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ fmt.Printf("%U", 65) U+0041

๋ฌธ์ž์—ด ๋ฐ ๋ฐ”์ดํŠธ

ํ˜•์‹ ์„ค๋ช… ์˜ˆ์‹œ ์ถœ๋ ฅ
%s ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ fmt.Printf("%s", "GoLang") GoLang
%q ๋”ฐ์˜ดํ‘œ ํฌํ•จ ๋ฌธ์ž์—ด fmt.Printf("%q", "GoLang") "GoLang"
%x ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค๋ฅผ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ fmt.Printf("%x", "Go") 476f
%X ๋Œ€๋ฌธ์ž 16์ง„์ˆ˜ fmt.Printf("%X", "Go") 476F

๋ถ€๋™์†Œ์ˆ˜์  (float, double)

ํ˜•์‹ ์„ค๋ช… ์˜ˆ์‹œ ์ถœ๋ ฅ
%f ๊ณ ์ • ์†Œ์ˆ˜์  fmt.Printf("%f", 3.14159) 3.141590
%.2f ์†Œ์ˆ˜์  ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ fmt.Printf("%.2f", 3.14159) 3.14
%e ์ง€์ˆ˜ํ˜•(์†Œ๋ฌธ์ž e) fmt.Printf("%e", 3.14159) 3.141590e+00
%E ์ง€์ˆ˜ํ˜•(๋Œ€๋ฌธ์ž E) fmt.Printf("%E", 3.14159) 3.141590E+00
%g ์ž๋™ํ˜•์‹ (์งง์€ ์ชฝ ์„ ํƒ) fmt.Printf("%g", 3.14159) 3.14159
%G ์ž๋™ํ˜•์‹ (๋Œ€๋ฌธ์ž) fmt.Printf("%G", 3.14159) 3.14159

ํฌ์ธํ„ฐ

fmt.Printf("%p", &x)	// 0xc0000140a8

 

๋ณตํ•ฉ ํƒ€์ž…

ํƒ€์ž… ์˜ˆ์‹œ ์ถœ๋ ฅ
[]int{1,2,3} %v [1 2 3]
map[string]int{"a":1,"b":2} %v map[a:1 b:2]
struct{Name string} %+v {Name:Go}

ํญ(width)๊ณผ ์ •๋ ฌ ์˜ต์…˜

ํ˜•์‹ ์ง€์ •์ž ์•ž์— ํญ(width)๊ณผ ์ •๋ ฌ ์˜ต์…˜์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์„ค๋ช… ์ถœ๋ ฅ
%6d ์ตœ์†Œ ํญ 6์นธ ํ™•๋ณด 123
%-6d ์™ผ์ชฝ ์ •๋ ฌ 123
%06d 0์œผ๋กœ ์ฑ„์›€ 000123
%10s ๋ฌธ์ž์—ด ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ " Go"

 

์ฃผ์˜์‚ฌํ•ญ

์ƒํ™ฉ ์ฃผ์˜์ 
ํƒ€์ž… ๋ถˆ์ผ์น˜ %d๋กœ float์ด๋‚˜ string์„ ์ถœ๋ ฅํ•˜๋ฉด panic ๋ฐœ์ƒ
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import fmt๋ฅผ importํ–ˆ์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋นŒ๋“œ ์—๋Ÿฌ
%v vs %+v ํ˜ผ๋™ ๊ตฌ์กฐ์ฒด ๋กœ๊น… ์‹œ %+v๋ฅผ ์จ์•ผ ํ•„๋“œ๋ช… ํ‘œ์‹œ
์‹ค์ˆ˜ ํฌ๋งท %f๋Š” ํ•ญ์ƒ 6์ž๋ฆฌ ์†Œ์ˆ˜์  ์ถœ๋ ฅ (์ž๋™ ์ž๋ฅด์ง€ ์•Š์Œ)
์„ฑ๋Šฅ ๊ณ ๋ ค ๊ณ ๋นˆ๋„ ๋กœ๊น…์—์„œ๋Š” fmt.Sprintf๋ณด๋‹ค strconv.Itoa ๋“ฑ ์ง์ ‘ ๋ณ€ํ™˜์ด ๋น ๋ฆ„

 

์ž์ฃผ ์“ฐ์ด๋Š” ์กฐํ•ฉ (์‹ค๋ฌด ์˜ˆ์‹œ)

log.Printf("Request: %+v", req)          // ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋ช… ํฌํ•จ ์ถœ๋ ฅ
log.Printf("Response: %#v", resp)         // Go ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ
fmt.Printf("User ID: %d, Name: %s\n", id, name)
fmt.Printf("Latency: %.3fms\n", latency)
fmt.Printf("Pointer: %p\n", &user)
fmt.Printf("Type: %T, Value: %v\n", v, v)

 

 

์š”์•ฝ

๋ฒ”์ฃผ ํ˜•์‹ ์„ค๋ช…
์ผ๋ฐ˜ %v, %+v, %#v, %T, %% ๊ธฐ๋ณธ, ํ•„๋“œ๋ช… ํฌํ•จ, Go๋ฌธ๋ฒ•, ํƒ€์ž…
์ •์ˆ˜ %d, %b, %o, %x, %X, %c, %U ์‹ญ์ง„, 2์ง„, 8์ง„, 16์ง„, ๋ฌธ์ž
์‹ค์ˆ˜ %f, %e, %E, %g, %G ๊ณ ์ •์†Œ์ˆ˜, ์ง€์ˆ˜, ์ž๋™
๋ฌธ์ž์—ด %s, %q, %x, %X ๋ฌธ์ž์—ด, ์ธ์šฉ, hex
ํฌ์ธํ„ฐ %p ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

 

๋Œ“๊ธ€