Оборачивание ошибок
size, err := strconv.Atoi(sizeStr)
if err != nil {
return fmt.Errorf("convert size from string: %w", err)
} Ошибки-объекты
var (
ErrInvalidSize = errors.New("invalid size")
ErrNotFound = errors.New("not found")
) size, err := strconv.Atoi(sizeStr)
if err != nil {
return fmt.Errorf("%w: convert from string: %w", ErrInvalidSize, err)
}
if size <= 0 {
return fmt.Errorf("%w: should be positive", ErrInvalidSize)
}
if _, ok := blockSizes\[size\]; !ok {
return ErrNotFound
} if errors.Is(err, ErrInvalidSize) {
return httpError{http.StatusBadRequest, "Size is invalid."}
} else if errors.Is(err, ErrNotFound) {
return httpError{http.StatusNotFound, "Block with provided size not found."}
} return fmt.Errorf("%w: size %d is not supported", ErrInvalidSize, size) Ошибки-типы
type ValidationError struct {
Field string
Problem string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("validation error on field %q: %s", e.Field, e.Problem)
} size, err := strconv.Atoi(sizeStr)
if err != nil {
return &ValidationError {
Field: "size",
Problem: "not a valid integer",
}
}
if size <= 0 {
return &ValidationError{
Field: "size",
Problem: "should be positive",
}
} var ve *ValidationError
if errors.As(err, &ve) {
return httpError{http.StatusBadRequest, fmt.Sprintf("Invalid value for field %s: %s.", ve.Field, ve.Problem)}
} Это и многое другое мы разбираем в курсе по Golang для начинающих
Другие статьи