Как открыть и закрыть соединение с базой данных

Прежде всего, в вашем дизайне должно быть что-то не так, если вы хотите переместить объект, содержащий мьютекс.

Но если вы все равно решите это сделать, вам нужно создать новый мьютекс в конструкторе перемещения, например:

// movable
struct B{};

class A {
    B b;
    std::mutex m;
public:
    A(A&& a)
        : b(std::move(a.b))
        // m is default-initialized.
    {
    }
};

Это поточно-безопасное, потому что движение конструктор может с уверенностью предположить, что его аргумент нигде не используется, поэтому блокировка аргумента не требуется.

-1
задан morteza khadem 16 January 2019 в 08:52
поделиться

1 ответ

Ваш код, возможно, код теста / POC. В производственном проекте вы можете использовать MVC или любую другую архитектуру в соответствии с вашими потребностями. Было бы сложно точно определить структуру вашего проекта. Но, по крайней мере, вы хотели бы создать пакет БД, который объявляет интерфейс для всех взаимодействий, связанных с БД. например,

type UserDBRepo interface{
   AddUser(context.Context, *User)
   GetUser(context.Context, uint64)
}

type userDBRepo struct{ //implements UserDBRepo
   *sql.DB // or whatever type gorm.Open returns
}

func NewUserDBRepo(db *sql.DB) DBRepo{
  return &dbRepo{DB: db}
}

Вышеуказанное в основном представляет собой одну таблицу RDBMS для этого примера. Для n таблиц БД может быть n таких файлов. Теперь вызовите NewUserDBRepo из main.go и передайте этот экземпляр всем службам, которым требуется эта БД.

0
ответ дан Saurav Prakash 16 January 2019 в 08:52
поделиться
Другие вопросы по тегам:

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