@setupx
Go & TS developer

Как сделать импорт переменной из 1 пакета, когда она в другой?

В общем у меня вот такая структура папки:
│   err.go
│
├───account
│       errors.go
│
├───auth
│       errors.go
│
├───json
│       errors.go
│
└───registation
        errors.go


В err.go такой код:
code

package errs

// Error codes:
// Account: 0-99
// Auth: 100-199
// Registration: 200-299
// JSON: 300-399

type CustomError struct {
	Message error  `json:"-"`
	Code    int    `json:"error_code"`
	Type    string `json:"error_type"`
}

func (e *CustomError) MessageError() error {
	return e.Message
}

func (e *CustomError) MessageString() string {
	return e.Message.Error()
}



А в остальных errors.go идут сами ошибки, пример account/errors.go
code

package errs

import (
	"errors"
	"moda/internal/tools/errs"
)

const accountErrorType = "account_error"

// Codes: 0-99

var (
	UserNotFound = errs.CustomError{
		Message: errors.New("user not found"),
		Code:    1,
		Type:    accountErrorType,
	}
	NotActivatedAccount = errs.CustomError{
		Message: errors.New("not activated account"),
		Code:    2,
		Type:    accountErrorType,
	}
)



Я хочу сделать, чтобы я мог импортировать данные переменные(UserNotFound, NotActivatedAccount и др. с других папок), через errs, т.е:
code

import (
	"fmt"
	errs "moda/internal/tools/errs"
)

func main() {
	fmt.Println(errs.NotActivatedAccount)
}



но получается только так:
code

package main

import (
	"fmt"
	errs "moda/internal/tools/errs/account"
)

func main() {
	fmt.Println(errs.NotActivatedAccount)
}



Можно ли это как-то сделать без:
accountErrs "moda/internal/tools/errs/account"
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
Go не любит лишних усложнений. У языка такая философия.
Вы ведь всё равно все ошибки держите в одном пакете, т.е. они всё равно в одной куче с точки зрения программы. Почему бы тогда вместо папок не использовать просто файлы? Т.о. плоская структура с именами файлов вместо папок будет соответствовать вашим нуждам.

err.go
account.go
auth.go
json.go
registation.go
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы