home
Fmt 패키지
go에서 fmt는 python의 format과 유사하게 다양한 데이터 타입의 값을 포맷팅해서 출력하거나 입력 받습니다. 콘솔 출력은 물론, 문자열 포맷팅에도 사용돼요.
크게 값 출력, 값 포맷팅으로 나눠볼 수 있습니다. 중요한 것들만 적어보았습니다.
- 값 출력
fmt.Print(a …any)
: 인자들을 기본 형식으로 출력합니다. 공백이 자동으로 추가되지 않습니다.fmt.Println(a ...any)
: 인자들을 기본 형식으로 출력하고 마지막에 개행 문자를 추가합니다. 각 인자 사이에 공백이 자동으로 추가됩니다.
- 값 포맷팅
fmt.Sprintf(format string, a ...any)
:Printf
와 동일하게 포맷 문자열에 따라 인자들을 포맷팅하여 문자열로 반환합니다.
여기에서 자주 사용되는 포맷 동사는 다음과 같아요.
%v
: 값의 기본 형식 (struct의 필드도 출력)%+v
: struct의 필드 이름도 함께 출력%#v
: Go 문법 형식으로 값 출력 (타입 정보 포함)%T
: 값의 타입 출력%t
: 부울 값 출력 (true
또는false
)%d
: 10진수 정수%b
: 2진수 정수%o
: 8진수 정수%x
,%X
: 16진수 정수 (소문자/대문자)%f
,%e
,%E
,%g
,%G
: 부동 소수점%s
: 문자열%q
: 이스케이프 처리된 문자열 (큰따옴표로 묶음)%p
: 포인터 주소
제가 사용한 곳은 SQS producer에서 MessageGroupId를 만들어줄 때 사용했습니다.
groupId := fmt.Sprintf("prod_%d", prodIds[0])
이렇게 하면 groupId는 prodIds 배열의 첫번째 요소가 %d
로 들어갑니다. 만약 첫번재 요소가 정수 12345라면 groupId는 “prod_12345”가 됩니다.
log 패키지
go의 log 패키지는 여타 다른 언어와 비슷하게 간단하게 로깅 기능을 제공합니다. 기본적으로는 stderr에 출력을하고, 타임스탬프나 소스 파일 정보 등등 포함이 가능합니다.
로깅 함수는 다음과 같아요.
log.Print(v ...any)
: 인자들을 기본 형식으로 출력합니다.log.Println(v ...any)
: 인자들을 기본 형식으로 출력하고 마지막에 개행 문자를 추가합니다.log.Printf(format string, v ...any)
: 포맷 문자열에 따라 인자들을 포맷팅하여 출력합니다.log.Fatal(v ...any)
:Print
와 동일하게 메시지를 출력한 후os.Exit(1)
을 호출하여 프로그램을 즉시 종료합니다.log.Fatalf(format string, v ...any)
:Printf
와 동일하게 메시지를 출력한 후os.Exit(1)
을 호출하여 프로그램을 즉시 종료합니다.log.Fatalln(v ...any)
:Println
과 동일하게 메시지를 출력한 후os.Exit(1)
을 호출하여 프로그램을 즉시 종료합니다.log.Panic(v ...any)
:Print
와 동일하게 메시지를 출력한 후panic
을 발생시킵니다.log.Panicf(format string, v ...any)
:Printf
와 동일하게 메시지를 출력한 후panic
을 발생시킵니다.log.Panicln(v ...any)
:Println
과 동일하게 메시지를 출력한 후panic
을 발생시킵니다.
로그를 조금 더 예쁘게 출력을 할 수 있습니다.
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
와 같이 세팅을 해준다면 이렇게 아름답게 로그가 뜹니다.
2025/07/10 15:41:38 main.go:10: Hello, world!