https://github.com/TangoEnSkai/uber-go-style-guide-kr
변수의 기본값(default value)는 0이기 때문에, 여러분들은 일반적으로 열거형을 0이 아닌 값(non-zero value)로 시작해야 한다.
type Operation int
const (
Add Operation = iota + 1
Subtract
Multiply
)
// Add=1, Subtract=2, Multiply=3
errors.New
간단한 정적 문자열(simple static strings)과 함께하는 에러
errors.New
가 충분Error()
메서드를 구현한 커스텀 타입 (Custom types)
"pkg/errors".Wrap
를 사용하여 래핑 된(wrapped) 오류
fmt.Errorf
형식화된 오류 문자열
만약 클라이언트가 오류를 감지해야 하고, 여러분들이 errors.New
을 사용하여 간단한 에러를 생성한 경우, var
에 에러를 사용해라.
// package foo
var ErrCouldNotOpen = errors.New("could not open")
func Open() error {
return ErrCouldNotOpen
}
// package bar
if err := foo.Open(); err != nil {
if err == foo.ErrCouldNotOpen {
// handle
} else {
panic("unknown error")
}
}
만약 클라이언트가 감지해야 할 오류가 있고 여러분들이 이를 추가하려고 하는 경우, 그것에 대한 자세한 정보를 추가하고 싶을 것이다. (예를들어, 정적 문자열이 아닌 경우), 이러할 경우, 여러분들은 커스텀 타입을 사용해야 한다.
type errNotFound struct {
file string
}
func (e errNotFound) Error() string {
return fmt.Sprintf("file %q not found", e.file)
}
func open(file string) error {
return errNotFound{file: file}
}
func use() {
if err := open(); err != nil {
if _, ok := err.(errNotFound); ok {
// handle
} else {
panic("unknown error")
}
}
}