GoLang web service - How to translate errors declared in package

Viewed 86

I'm implementing server using GIN Framework.

The Gin framework has a handler for each route.

Each function handler has it's own controller that returns some result (basically error)

package controller

var (
    ErrTooManyAttempts = errors.New("too many attempts")
    ErrNoPermission = errors.New("no permission")
    ErrNotAvailable = errors.New("not available")
)

This errors are created for developers and logging, so we need to beautify and translate these before sending them to the client.

To be able to get translation we should know the key of the message.

But the problem is I need to bind these errors in some map[error]string (key) to get translation key by error.

It's quite complex because I have to bind all the errors with the corresponding keys.

To improve it, I'd like to use reflection:

  1. Get all variables in the package

  2. Walk through and find Err prefix

  3. Generate translation key based on package name and error name, ex: controller-ErrTooManyAttempts

  4. Merge translation file, so it should look like this:

`

{
  "controller-ErrTooManyAttempts": "Too many attempts. Please try again later",

  "controller-ErrNoPermission": "Permission to perform this action is denied",

  "controller-ErrNotAvailable": "Service not available. Please try again later"
}

`

What is the correct way to translate errors from the package? Is it possible to provide me with some example?

0 Answers
Related