Как правильнее хранить разные типы в одном поле структуры?

Есть структуры User, Subscriber и Admin
type Admin struct {
	Permissions map[string]interface{}
}
type Subscriber struct {
	Online        bool
	Status        string
	SubscriptedTo []int
}
type User struct {
	ID    int
	Login string
	Role  string // "subscriber"/"admin"
	RoleModel ??? // здесь должен быть Admin{} или Subscriber{}
}

Как правильнее в User.RoleModel в зависимости от роли записать структуру Admin или Subscriber? Если делать через пустой интерфейс, то потом постоянно надо прогонять его через mapstructure.Decode
Может, есть какие-то идеи как подобную задачу решить иначе?
  • Вопрос задан
  • 325 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Мне кажется вы с ног на голову... Может быть так?
type Admin struct {
  Permissions map[string]interface{}
  User
}
type Subscriber struct {
  Online        bool
  Status        string
  SubscriptedTo []int
  User
}
type User struct {
  ID    int
  Login string
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@micronull
Для перечисления типа можно использовать типизированные константы.
const (
	NewUserType  userType = "NEW"
	AdminType  userType = "ADMIN"
)

type User struct {
  ID    int
  Login string
  Type userType
}


Хотя для конкретного кейса это не подходит. Тут лучше применить RBAC.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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