새롭게 배운 것

나만의 에러 타입 정의하기

에러 패키지는 다음과 같이 인터페이스로 정의되어 있으므로 나만의 에러 구조체를 정의할 수 있다.

type error interface {
	Error() string
}

다음과 같이 사용할 수 있을 것이다.

...

type PasswordError struct {
	Len int
	RequireLen int
}

func (pw PasswordError) Error () {
	return "암호 길이가 짧습니다"
}

func RegisterAccount(name, password string) error {
	if len(password) < 8 {
		return PasswordError{len(password), 8}
	}

	return nil
}

func main(){
	err := RegisterAccount("myID", "myPW")
	if err != nil {
		if errInfo, ok := err.(PasswordError); ok { //타입 어서션.
			fmt.Printf("%v Ln:%d RequireLen:%d", errInfo, errInfo.Len, errInfo.RequireLen)
		}
	}else{
		fmt.Println("회원가입 성공")
	}
}

패닉

프로그램을 강제 종료시켜 문제 발생 원인을 바로 파악하게 하는 것이 목적이다.

이런 점에서 에러와 다르다.

실제 배포 환경에서는 패닉 발생 시 리커버리하도록 할 것

panic(interface{})

어떤 타입이든 넣어서 사용할 수 있다.