error 를 한번 더 보자.
error 는 error string 이다.
error 는 interface 이다.
type error interface {
Error() string
}
즉, Error() string 이란 메서드만 구현되어 있으면,
모두 error 기능을 수행할 수 있다고 본다.
즉, 아래 run() 함수가 리턴하는 error 타입은
위에서 정의된 Error() string 메서드를 구현한 객체를 리턴한다는 얘기가 된다.
package main
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 {
return &MyError{ time.Now(), "작동실패."}
}
func main() {
if err := run(); err != nil {
fmt.Println(err)
}
}
D:\DEV\PP\work_4\src>go run hello69.go
at 2012-05-01 11:09:15.2010718 +0000 UTC, 작동실패.