目次
質問内容
Solution
ホームページ バックエンド開発 Golang Postgres と MongoDB を使用した CRUD?

Postgres と MongoDB を使用した CRUD?

Feb 09, 2024 pm 02:00 PM
ユーザー登録

使用 Postgres 和 MongoDB 进行 CRUD?

php 編集者の Xigua が、この記事を通じて CRUD 操作に Postgres と MongoDB を使用する方法を学習します。 Postgres はリレーショナル データベースであり、MongoDB はドキュメント データベースです。 CRUD 操作は、データの作成 (Create)、読み取り (Read)、更新 (Update)、および削除 (Delete) のプロセスを指します。これら 2 つの異なるタイプのデータベースを組み合わせることにより、さまざまなニーズに基づいてデータ操作に最適なデータベースを選択し、効率と柔軟性を向上させることができます。次に、CRUD 操作におけるこれら 2 つのデータベースのアプリケーションを見てみましょう。

質問内容

私は Go とバックエンドについてはかなり初心者で、Go インターンシップ プログラムに参加しています。 psql データベースに接続する CRUD を構築しましたが、今度は mongoDB に接続するように指示されます。mongoDB は開発に使用され、PSQL は運用に使用されます。 mongo の新しいハンドラーを最初から作成する必要がありますか、それとも同じハンドラーを使用して、使用されているデータベースの種類を何らかの方法で判断し、それに応じてロジックを使用できますか? たとえば、ユーザー登録エンドポイントのハンドラーがあります:

リーリー

私は mongo の挿入、登録、および CheckIfEmailExists 関数を構築しました:

func (ctrl *UserController) Register(c *gin.Context) {
    var user models.User
    if err := c.BindJSON(&user); err != nil {
        c.AbortWithStatusJSON(http.StatusUnprocessableEntity, gin.H{
            "error":   true,
            "message": err.Error(),
        })
        return
    }
    err := ctrl.userService.Register(&user)
    if err != nil {
        c.AbortWithStatusJSON(http.StatusUnprocessableEntity, gin.H{
            "error":   true,
            "message": err.Error(),
        })
        return
    }

    c.JSON(http.StatusCreated, gin.H{
        "message": "successfully created an user",
    })
}

func (svc *UserService) Register(user *models.User) error {
    if svc.userRepo.CheckIfEmailExists(user.Email) {
        return errors.New("user already registered")
    }
    hash, err := svc.generatePasswordHash(user.Password)
    if err != nil {
        return errors.New("err can't register user")
    }

    user.Password = hash

    return svc.userRepo.Insert(user)
}

func (repo *UserRepository) CheckIfEmailExists(mail string) bool {
    var user models.User
    err := repo.dbClient.Debug().Model(models.User{}).Where("email = ?", mail).Find(&user).Error
    return errors.Is(err, gorm.ErrRecordNotFound)
}

func (repo *UserRepository) Insert(user *models.User) error {
    err := repo.dbClient.Debug().Model(models.User{}).Create(user).Error
    if err != nil {
        log.Printf("failed to insert user: %v\n", err)
        return err
    }
    return nil
}
ログイン後にコピー

Solution

UserService の作成方法に関するコードが提供されていません。

理想的には、次のようなインターフェイスが必要です:

リーリー

その後、UserService は次のように作成されます:

リーリー

そして、2 つの別個のリポジトリがあり、両方とも UserRepository インターフェイスを実装します。つまり、インターフェイスと同じ名前と同じシグネチャ (パラメーター、戻り値の型) を持つメソッドが必要です。

mongo_user_repository.go

リーリー

postgres_user_repository.go

リーリー

以下の (非常に悪い) 例のように、ユースケースに応じてこれらのいずれかを渡すことができます。

main.go

リーリー

以上がPostgres と MongoDB を使用した CRUD?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

鉄道12306メールアドレスの登録方法 鉄道12306メールアドレスの登録方法 Apr 30, 2024 am 11:33 AM

Railway 12306 の電子メール アドレスを登録する手順は次のとおりです。 12306 の Web サイトにアクセスし、[登録] をクリックして、電子メール、名前、携帯電話、その他の情報を入力し、パスワードと秘密の質問を設定します。プロンプトに、認証情報用の電子メール認証コードと携帯電話認証コードを入力し、「登録を完了」をクリックします。

Bitget Wallet 取引所に登録できないのはなぜですか? Bitget Wallet 取引所に登録できないのはなぜですか? Sep 06, 2024 pm 03:34 PM

BitgetWallet 取引所に登録できない理由は、アカウント制限、サポートされていない地域、ネットワークの問題、システム メンテナンス、技術的障害などさまざまです。 BitgetWallet 取引所に登録するには、公式 Web サイトにアクセスして情報を入力し、規約に同意して登録を完了し、本人確認を行ってください。

なぜDouyinは2つのアカウントを持っているのですか?携帯電話に2つのTikTokをインストールするにはどうすればよいですか? なぜDouyinは2つのアカウントを持っているのですか?携帯電話に2つのTikTokをインストールするにはどうすればよいですか? May 06, 2024 pm 09:28 PM

デジタル時代において、ソーシャルメディアは人々の生活に不可欠な部分となっています。 Douyin は、中国で最も人気のあるショートビデオ プラットフォームの 1 つとして、多くのユーザーを魅了しています。アカウントを 2 つ登録しているユーザーもいます。では、Douyin はなぜ 2 つのアカウントを持っているのでしょうか?この記事では、この質問に答え、携帯電話に 2 つの Douyin アカウントをインストールする方法を説明します。 1. なぜDouyinは2つのアカウントを持っているのですか?機能の差別化: ユーザーによっては、コンテンツの種類や機能に基づいてアカウントを区別する場合があります。たとえば、あるアカウントは日常生活を共有するために使用され、別のアカウントは専門的なスキルを示すために使用されます。 2. プライバシー保護: 一部のユーザーは、2 つのアカウントを通じてプライバシーを保護し、生活と仕事を分離し、情報漏洩を回避したいと考えています。 3. インタラクションのニーズ: インタラクションのニーズにより、ユーザーによっては 2 つを登録する場合があります。

Douyinのスパークカラー変更ルールの詳しい説明は何ですか?条件に合わせた多彩なスパークカラー Douyinのスパークカラー変更ルールの詳しい説明は何ですか?条件に合わせた多彩なスパークカラー May 04, 2024 am 09:31 AM

ユーザー インタラクションを強化し、ユーザー エクスペリエンスを向上させるために、Douyin プラットフォームは興味深いインタラクティブ メカニズムである Spark を開始しました。ユーザーは、Douyin での一連のアクションを通じてスパークをアクティブ化し、アップグレードすることができます。異なる色は、異なる成果と名誉を表します。 Douyin Spark の色変更ルールを理解すると、ユーザーがより適切に参加して対話し、Douyin によってもたらされるソーシャルな楽しみを楽しむことができます。 1.Douyinのスパークカラー変更ルールの詳しい説明は何ですか? 1. 行動は、いいね、コメント、共有などのユーザーのインタラクティブな行動を活性化し、火花を散らす可能性があります。 2. レベルの向上 ユーザーのインタラクションが増えると、スパークは徐々にアップグレードされ、それに応じて色が変化します。 3. 色の変化 スパークの色の変化は、通常、ユーザーのインタラクション頻度、インタラクションの質、アクティビティへの参加に対する熱意に関連しています。 4. タスクが完了しました

Deepseekの公式ウェブサイトの入り口と最新のプロモーションアクティビティ Deepseekの公式ウェブサイトの入り口と最新のプロモーションアクティビティ Feb 19, 2025 pm 05:15 PM

Deepseekの公式Webサイトは現在、ユーザーにショッピングエクスペリエンスを提供するための複数の割引アクティビティを開始しています。新規ユーザーはサインアップして10ドルのクーポンを取得し、視聴者全員に15%の限定時間割引を享受します。友人は報酬を獲得することもできます。また、買い物時に贈り物を償還するためにポイントを蓄積することができます。イベントの締め切りは違う。

トマトの小説でタスクを完了する方法 トマトの小説でタスクを完了する方法 May 03, 2024 am 02:27 AM

トマトノベルズのタスクを完了すると、コインとポイントを獲得できます。 方法には、新規ユーザー登録のタスクを完了することが含まれます。毎日チェックインしてください。割り当てられた小説の章を読みます。指定した小説の章にコメントを残してください。友達を招待して登録してください。ソーシャル プラットフォームで小説を共有します。

中国本土でXT.COM取引所アカウントを登録するにはどうすればよいですか? 中国本土でXT.COM取引所アカウントを登録するにはどうすればよいですか? Aug 16, 2024 pm 06:51 PM

本土のユーザーは、次の手順で XT.COM 取引所に登録できます。 XT.COM 公式 Web サイトにアクセスします。右上隅の「登録」ボタンをクリックします。 「モバイル登録」オプションを選択します。本土の携帯電話番号を入力し、確認コードを取得して入力します。パスワードを設定します。認証を完了します。登録が完了しました。

セサミオープンドア公式ウェブサイト取引プラットフォームセサミオープンドア公式ウェブサイト交換登録の入り口 セサミオープンドア公式ウェブサイト取引プラットフォームセサミオープンドア公式ウェブサイト交換登録の入り口 Feb 28, 2025 am 10:57 AM

Gate.io Sesame Openは、Fiat Currency Trading、Currency Trading、Leveraged Trading、Perpetual Contracts、ETFレバレッジドトークン、ウェルスマネジメント、スタートアップの初期公募など、ユーザーにセキュリティ、安定性、オープン性、透明度を提供するなど、世界をリードするブロックチェーンデジタル資産取引プラットフォームです。

See all articles