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!