11. 에러 (error)
: 에러 문장(string)으로 자신을 표현할 수 있는 것은 모두 에러이다. 이 아이디어는 문자열(string)을 반환하는 하나의 메소드 Error로 구성된 내장 인터페이스 타입 error에서 나왔다.
type error interface{
Error() string
}
fmt 패키지의 다양한 출력 루틴들은 error의 출력을 요청 받을때 자동으로 이 메소드를 호출 한다.
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s", e.When, e.What)
}
func run() error { //1. error 인터페이스로 MyError의 리시버 메소드를 리턴하게 되면.
return &MyError{ time.Now(), "it didn't work", }
}
func main() {
if err := run(); err != nil {
fmt.Println(err) //2. fmt패키지는 error인터페이스를 받아서, 자동으로 Error메소드를 실행한다.
}
}