본문 바로가기
Programming/Go

Go(Golang)의 fmt.Errorf()

by 코딩여걸 2022. 8. 19.
728x90

Golang의 fmt.Errorf() 함수에 대해 알아보자!

 

https://pkg.go.dev/fmt

 

fmt package - fmt - Go Packages

Print, Println, and Printf lay out their arguments differently. In this example we can compare their behaviors. Println always adds blanks between the items it prints, while Print adds blanks only between non-string arguments and Printf does exactly what i

pkg.go.dev


fmt.Errorf() 함수를 사용해 에러가 발생한 값과 매개변수의 정보를 담아 에러 메시지를 만들 수 있다.

서식이 적용된 문자열과 여러 개의 매개변수로 메시지를 만드는 방식은 fmt.Printf()와 유사하다.

단, 메시지를 화면에 출력하는 것이 아니라 메시지를 담고 있는 error 타입 값을 만들어낸다.

fmt.Errorf() 프로토타입

func Errorf(format string, a ...interface{}) error

오류의 인스턴스를 반환

Parameters (매개변수)

  • string : 문자열의 경우 %s, 정수의 경우 %d와 같은 자리 표시자 값이 표함이 된 오류 메시지
  • a ...interface{} : 코드 또는 내장 함수에 사용되는 상수 변수 이름

Return Value(반환 값) : 문자열을 오류를 만족하는 값으로 반환

 

fmt.Errorf() 함수는 화면에 출력하지 않고 에러 메시지가 담긴 errors 타입의 인스턴스를 만들어 반환한다.

여러 인수를 가질 수 있음을 의미하는 가변 함수이기도 하다.

  • 첫 번째 인수 : 형식 또는 템플릿 문자열이다.
  • 가변 인수 수 : 각 인수는 string, int, struct 또는 무엇이든 될 수 있다. 이것이 빈 인터페이스인 이유이다.

Errorf는 사용자 지정 지정자를 사용하여 문자열의 형식을 지정한다.

형식 또는 템플릿 문자열인 첫 번째 인수에는 형식을 지정해야 하는 실제 문자열과 일부 형식 지정 동사가 포함된다.

이러한 형식화 동사는 후행 인수가 최종 문자열에서 형식화되는 방법을 알려준다.

기본적으로 형식 문자열 인수에는 후행 인수로 대체되는 특정 기호가 포함된다.

 

문자열 변수 형식 지정

%s

정수 형식화

%d

구조체 형식 지정

  • %v
    • 값만 출력
    • 필드명은 출력되지 않음
    • Println을 사용할 때 구조체를 출력하는 기본 방법
  • %+v
    • 필드와 값을 모두 출력
  • %#v
    • 구조체와 필드 이름과 값을 출력

 

함수 반환 값으로 에러를 리턴할 때 주로 사용했다.

func Errorf(format string, a ...interface{}) error {
	// 중복 유저 발생시 에러를 반환
	return nil, fmt.Errorf("duplicated user")
}

오류 래핑

  • 특정 오류 인스턴스가 다른 오류를 래핑하고 해당 특정 인스턴스 자체가 다른 오류 내부에 래핑 될 수 있는 오류 계층을 생성하는 것을 의미
err := fmt.Errorf("... %w ...", ..., err, ...)

 

%w

  • 오류를 래핑 하는 데 사용
  • fmt.Errorf는 단 하나의 %w 지문으로 호출되어야 함

nil values

%s와 %v의 출력 결과가 다르다.

%s : %!s(<nil>)
%v : <nil>

참고 : https://golangbyexample.com/errorf-function-golang/

728x90

'Programming > Go' 카테고리의 다른 글

go-chart 사용해서 그래프 그리기  (0) 2022.09.26
Go(Golang) 학습할 때 유용한 사이트  (0) 2022.08.22
[FPDF] 한글 처리  (0) 2022.08.09
[FPDF] MultiCell()을 활용한 개행(줄바꿈) 처리  (0) 2022.08.09
[FPDF] MultiCell  (0) 2022.08.02

댓글