dmnBrest
@dmnBrest
Salesforce for money. Python, Go, Ruby for soul.

Как вы обрабатываете связи в Базе Данных в приложении на Go?

В своем Web приложении на Go для работы с базой данных планирую использовать sqlx который позволяет мне данные из запроса положить сразу в структуру. Вот как запрос сделать и структуру все вроде понятно.
Но как "красиво" работать со связанными данными?

Например у меня есть таблицы Articles и Users. Articles ссылается на Users через UserId.

Чтобы мне вывести список статей с авторами. Выбираю с помощью JOIN. Вот тут загвоздка. Мне нужно под это делать отдельную структуру со всеми полями которые содержатся в двух таблицах (т.е. в общем случае под каждый запрос делать свою структуру). Или можно сделать 2 структуры (User и Article как делают с ORM) и как-то хитро данные разложить по этим двум структурам и их как-то связать.

Что можете посоветовать, или поделитесь ссылкой на какой пример?
Спасибо.
  • Вопрос задан
  • 2779 просмотров
Решения вопроса 2
@mantyr
Пишу много Golang кода с удовольствием:)
Попробуйте вообще отказаться от структур там где не нужно явно добавлять к ним методы. Ничто не мешает вам сделать столько переменных нужных типов сколько вам нужно... и оперировать ими как угодно.

Ну или попробуйте дописать нужный механизм в sqlx, всё польза будет:)

P.S. Знаю что топик изрядно старый, просто новых нет:)
Ответ написан
dmnBrest
@dmnBrest Автор вопроса
Salesforce for money. Python, Go, Ruby for soul.
Пришел к такому варианту. Что можете сказать по этому поводу?

есть две структуры:
type User struct {
	Id  int
	Username  string 
}
type Article struct {
	Id  int   
	Title  string
	User  User
}

Достаю данные и укладываю в Article вот таким способом:
rows, _ := DB.Queryx(SELECT a.title as title, u.username FROM articles a LEFT JOIN users u ON a.user_id = u.id)
for rows.Next() {
	a := Article{}
	err = rows.Scan(&a.Title, &a.User.Username)
	glog.Infoln(aa)
}


Вроде работает, но все прелесть от sqlx пропала - структура заполняется стандартным Scan из database/sql вручную.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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