Задать вопрос
@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"
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
Go не любит лишних усложнений. У языка такая философия.
Вы ведь всё равно все ошибки держите в одном пакете, т.е. они всё равно в одной куче с точки зрения программы. Почему бы тогда вместо папок не использовать просто файлы? Т.о. плоская структура с именами файлов вместо папок будет соответствовать вашим нуждам.

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

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

Похожие вопросы