Я делаю простенькую апишку для блога на голанге.
У меня есть простой тип для записи блога:
type Post struct {
title string
author string
category string
}
Проблема в том, что есть разные эндпоинты, которые могут возвращать запись из блога, но с разным набором полей. Например, в некоторых случаях я хочу, чтобы записи содержали инфу об авторе, в других случаях, чтобы инфу о категории, а в третьих и то, и другое.
Иными словами, для каждого из кейсов придётся заводить разные типы? Задача тривиальная и кажется есть способы лучше. Пока что мой код выглядит примерно так:
type Post struct {
title string
author string
category string
}
type Author struct {
firstname string
lastname string
}
type Category struct {
name string
parent Category
}
type PostWithAuthor struct {
title string
author Author
category string
}
type PostWithCategory struct {
title string
author string
category Author
}
type PostWithAuthorAndCategory struct {
title string
author Author
category Category
}
func getPost() (Post) {
}
func getPostWithCategory() (PostWithCategory) {
}
func getPostWithAuthor() (PostWithAuthor) {
}
func getPostWithAuthorAndCategory() (PostWithAuthorAndCategory) {
}
Однако, если таких полей, которые можно будет джойнить, будет больше, то и количество комбинаций будет расти экспоненциально. Как-то тупо выходит :( Одна только возня с неймингом этих типов будет болью.
Полагаю, есть способ не типизировать возвращаемые данные, а отдавать какой-нибудь bson.M (у меня монга), но тогда в чем смысл будет вообще использовать го.
Так как я использую монгу, то если я попробую передать не тот тип, то всё упадёт.