고랭에서 에러 핸들링을 하기 위해서는 먼저 "errors" 라는 패키지를 import 해야한다.
지난 번에 작성한 greetings.go에 errors를 import 해보자
package greetings
import (
"errors"
"fmt"
)
그 다음 우리는 다음과 같은 상황에서 에러를 뱉을 것이다.
[이름 변수에 빈 값이 들어올 경우]
if name == "" {
return "", errors.New("empty name")
}
그리고 이 코드를 가지고 있는 함수는 error를 뱉을 수 있기 때문에 함수를 다음과 같이 작성한다.
// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {
// If no name was given, return an error with a message.
if name == "" {
return "", errors.New("empty name")
}
// If a name was received, return a value that embeds the name
// in a greeting message.
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message, nil
}
나의 궁예.. 로는 throws Exceptions 와 비슷한 의미로 보이긴 한다...
위 함수는 두 가지 값을 리턴하는데, 하나는 실제 메시지 이고, 하나는 nil 이다.
(여기서 알수 있듯이 고랭은 리턴 값이 하나가 아닐 수 있다. nil 뿐만 아니고, 모든 함수는 다양한 값들을 리턴할수 있다. - 우왕)
nil 이 의미 하는 바는 에러가 없이 함수가 성공적으로 리턴되었음을 알려준다.
해당 인자로 우리는 함수가 정상 동작했는지 판단이 가능하다.
이제 뱉은 에러를 에러로그로서 찍어볼 예정이다.
hello.go 가 greetings를 call 하고 있기 때문에 hello.go에 에러로그를 찍어볼것이다.
import (
"fmt"
"log"
"example.com/greetings"
)
로그를 찍으려면 위 코드 처럼 "log"를 import 하면 된다.
이제 main 함수에 에러가 났을 경우 에러 로그를 추가 하겠다.
func main() {
// Set properties of the predefined Logger, including
// the log entry prefix and a flag to disable printing
// the time, source file, and line number.
log.SetPrefix("greetings: ")
log.SetFlags(0)
// Request a greeting message.
message, err := greetings.Hello("")
// If an error was returned, print it to the console and
// exit the program.
if err != nil {
log.Fatal(err)
}
// If no error was returned, print the returned message
// to the console.
fmt.Println(message)
}
여기서 볼수 있듯이 로그의 prefix를 설정 할수 이다.
우리는 이 prefix를 통해 로그 검색을 용이 하게 만들 수 있다.
디폴트로 다음과 같이 날짜와 시간을 로그에 추가해주지만
[2016/01/15 16:04:08 Logging]
굳이 이 시간을 없애고자 한다면 위 코드 처럼 log.SetFlags(0)으로 세팅해주면 된다.
greeting.hello() 함수는 리턴값이 두개 임으로 각각의 값을 담을 변수를 순서대로 선언해준 다음 함수를 사용한다.
그리고 여기서 선언한 err는 에러 여부를 담고 있는데, err가 nil 이 아니라면 에러를 리턴한 것으로 판단할 수 있기 때문에
해당 조건으로 에러 분기를 진행하고,
만약 에러라면 log.Fatal()을 통해 에러로그를 출력하고 바로 exit할 수 있도록 한다.
참고) log.Fatal()에 대한 추가 설명
log package - log - Go Packages
Discover Packages Standard library log Version: go1.23.3 Opens a new window with list of versions in this module. Published: Nov 6, 2024 License: BSD-3-Clause Opens a new window with license information. Imports: 8 Opens a new window with list of imports.
pkg.go.dev
그리고 에러가 없다면, 원래의 메시지를 출력하는 것으로 마무리를 짓는다.
해당 코드를 돌리면, name이 빈 칸이기 때문에, 에러를 뱉고 프로그램을 exit 한다.
참고로 log.SetFlags(0)를 세팅 하지 않는 다면 다음처럼 에러로그를 찍는다.
'개인공부 > language' 카테고리의 다른 글
[GO] 배열 선언하기 (0) | 2024.12.04 |
---|---|
[GO] 로컬 패키지 호출 방법 (0) | 2024.11.19 |
[GO] 함수 기본 작성법 (2) | 2024.11.12 |
[GO] 모듈과 패키지 (0) | 2024.11.05 |
[JAVA] ArrayList가 비어있는지 확인 하기 (0) | 2024.02.27 |