error_interface.go 612 B

1234567891011121314151617181920212223242526272829303132
  1. package main
  2. import (
  3. "fmt"
  4. "unicode"
  5. )
  6. type customError uint
  7. func (c customError) Error() string {
  8. return fmt.Sprintf("цифра, индекс %d", c)
  9. }
  10. func errorInString(str string) error {
  11. // Полезная работа со строкой проигнорирована
  12. for i, s := range str {
  13. if unicode.IsDigit(s) {
  14. return customError(i)
  15. }
  16. }
  17. return nil
  18. }
  19. func main() {
  20. err := errorInString("string1string")
  21. if err != nil {
  22. fmt.Printf("Ошибка обработана: %v\n", err)
  23. }
  24. if cError, ok := err.(customError); ok {
  25. fmt.Printf("Контекст: %d\n", cError)
  26. }
  27. }