refactor(errs): migrate from gperr.Error to standard Go error interface

This is a large-scale refactoring across the codebase that replaces the custom
`gperr.Error` type with Go's standard `error` interface. The changes include:

- Replacing `gperr.Error` return types with `error` in function signatures
- Using `errors.New()` and `fmt.Errorf()` instead of `gperr.New()` and `gperr.Errorf()`
- Using `%w` format verb for error wrapping instead of `.With()` method
- Replacing `gperr.Subject()` calls with `gperr.PrependSubject()`
- Converting error logging from `gperr.Log*()` functions to zerolog's `.Err().Msg()` pattern
- Update NewLogger to handle multiline error message
- Updating `goutils` submodule to latest commit

This refactoring aligns with Go idioms and removes the dependency on
custom error handling abstractions in favor of standard library patterns.
This commit is contained in:
yusing
2026-02-08 12:07:36 +08:00
parent 7eb2a78041
commit 6da7227f9b
118 changed files with 572 additions and 563 deletions

View File

@@ -99,7 +99,7 @@ type Location struct {
```go
// LoadMaxMindDB loads or downloads the MaxMind database.
func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) gperr.Error
func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) error
```
### Lookup
@@ -324,8 +324,8 @@ The maxmind package integrates with:
```go
var (
ErrResponseNotOK = gperr.New("response not OK")
ErrDownloadFailure = gperr.New("download failure")
ErrResponseNotOK = errors.New("response not OK")
ErrDownloadFailure = errors.New("download failure")
)
```

View File

@@ -6,7 +6,6 @@ import (
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/yusing/godoxy/internal/notif"
gperr "github.com/yusing/goutils/errs"
"github.com/yusing/goutils/task"
)
@@ -24,7 +23,7 @@ func warnNotConfigured() {
})
}
func SetInstance(parent task.Parent, cfg *Config) gperr.Error {
func SetInstance(parent task.Parent, cfg *Config) error {
newInstance := &MaxMind{Config: cfg}
if err := newInstance.LoadMaxMindDB(parent); err != nil {
return err

View File

@@ -16,7 +16,6 @@ import (
"github.com/oschwald/maxminddb-golang"
"github.com/yusing/godoxy/internal/common"
maxmind "github.com/yusing/godoxy/internal/maxmind/types"
gperr "github.com/yusing/goutils/errs"
"github.com/yusing/goutils/task"
)
@@ -52,8 +51,8 @@ var httpClient = &http.Client{
}
var (
ErrResponseNotOK = gperr.New("response not OK")
ErrDownloadFailure = gperr.New("download failure")
ErrResponseNotOK = errors.New("response not OK")
ErrDownloadFailure = errors.New("download failure")
)
func (cfg *MaxMind) dbPath() string {
@@ -74,7 +73,7 @@ func (cfg *MaxMind) dbFilename() string {
return "GeoIP2-Country.mmdb"
}
func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) gperr.Error {
func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) error {
if cfg.Database == "" {
return nil
}
@@ -92,7 +91,7 @@ func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) gperr.Error {
// ignore invalid error, just download it again
var invalidErr maxminddb.InvalidDatabaseError
if !errors.As(err, &invalidErr) {
return gperr.Wrap(err)
return err
}
}
valid = false
@@ -101,7 +100,7 @@ func (cfg *MaxMind) LoadMaxMindDB(parent task.Parent) gperr.Error {
if !valid {
cfg.Logger().Info().Msg("MaxMind DB not found/invalid, downloading...")
if err = cfg.download(); err != nil {
return ErrDownloadFailure.With(err)
return fmt.Errorf("%w: %w", ErrDownloadFailure, err)
}
} else {
cfg.Logger().Info().Msg("MaxMind DB loaded")
@@ -236,7 +235,7 @@ func (cfg *MaxMind) download() error {
// extract .tar.gz and to database
err = extractFileFromTarGz(databaseGZ, cfg.dbFilename(), tmpDBPath)
if err != nil {
return gperr.New("failed to extract database from archive").With(err)
return err
}
// test if the downloaded database is valid

View File

@@ -3,7 +3,6 @@ package maxmind
import (
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
gperr "github.com/yusing/goutils/errs"
strutils "github.com/yusing/goutils/strings"
)
@@ -21,7 +20,7 @@ const (
MaxMindGeoIP2 DatabaseType = "geoip2"
)
func (cfg *Config) Validate() gperr.Error {
func (cfg *Config) Validate() error {
if cfg.Database == "" {
cfg.Database = MaxMindGeoLite
}