@dodrator

Как правильно устанавливать соединение с БД?

Я использую pgx pool. В офф документации написан этот код:
func main() {
	dbpool, err := pgxpool.New(context.Background(), os.Getenv("DATABASE_URL"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\n", err)
		os.Exit(1)
	}
	defer dbpool.Close()

	var greeting string
	err = dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
	if err != nil {
		fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
		os.Exit(1)
	}

	fmt.Println(greeting)
}

Как работают с БД в продакшене, насколько этот пример взаимодействия с БД соответствует реальности? Судя по примеру, мне просто нужно использовать этот код везде, где я провожу операции с БД. Если я делаю запись в базу, то создаю/закрываю соединение таким образов в функции, которая проводит эту запись, вставляю sql код и готово. Тоже самое с чтением из базы или может есть какие-то паттерны для работы с БД в go, а пример в документации для наивных? Например, в Java были репозитории с методами типа findUserBy(Id,Username и так далее) и их учили использовать с самого начала
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 2
DollyPapper
@DollyPapper
Если вы будете пул создавать каждый раз при запросе в каждой функции, то какой тогда смысл от пула? Пул в go это своего рода синглтон, он создается один раз и далее распространяется по всему приложению. Очевидно, что если каждый раз будет новый инстанс пула, то никакой защиты от переполнения коннектов мы не получим. Итого: пул создается один раз, далее во всех остальные части программы он передается как вам удобно, через DI напрямую в фукнцию, в конструктор обьекта или еще как.
Ответ написан
Комментировать
@calculator212
Например, в Java были репозитории с методами типа findUserBy(Id,Username и так далее)
Вероятно использовалась ORM, в го они тоже есть. Но советовал бы вам попробовать пописать запросы в ручную, т.к. это довольно часто встречается можете для начала почитать гайд
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект