ホームページ > バックエンド開発 > Golang > Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成するにはどうすればよいですか?

Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成するにはどうすればよいですか?

WBOY
リリース: 2023-11-01 08:41:34
オリジナル
768 人が閲覧しました

Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成するにはどうすればよいですか?

テイクアウト市場がますます成熟するにつれて、家庭料理が多くの家庭の夕食の第一選択となっています。宅配調理サービスのプロバイダーとして、信頼できるユーザー アカウントへのリチャージを提供することが不可欠です。この記事では、Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成する方法を紹介します。

1. 設計

再充電モジュールを設計するときは、次の点を考慮する必要があります:

  1. 使用するデータ構造

リチャージモジュールでは、リチャージの前後にユーザーの残高を保存する必要があります。したがって、次のデータ構造を使用できます:

type Account struct {
    UserID int
    Balance float64
}
ログイン後にコピー

ここでは、UserID を使用してユーザーを識別し、Balance を使用してそのアカウント残高を保存します。

  1. 実装する関数

ユーザー リチャージ モジュールでは、次の関数を実装する必要があります:

  • 現在のユーザー残高をクエリする
  • リチャージ
  • 控除

同じトランザクションに複数のアカウント操作が含まれる可能性があることを考慮して、トランザクション管理データベース操作を使用することをお勧めします。

2. 実装

特定の実装では、GORM などの Go 言語によって提供される ORM フレームワークを使用できます。

  1. GORM のインストール

GORM を Go 言語でインストールすると非常に便利です。ターミナルで次のコマンドを実行するだけです:

go get -u github.com/jinzhu/gorm
ログイン後にコピー
  1. データベースへの接続

GORM フレームワークを使用する前に、まずデータベースに接続する必要があります。 MySQL をデータベースとして使用したり、Go 言語で MySQL を使用したり、サードパーティのライブラリ go-sql-driver/mysql を使用したりできます。

import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/go-sql-driver/mysql"
)

DB, err := gorm.Open("mysql", "username:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
    panic(fmt.Sprintf("database connection error: %v", err))
}
ログイン後にコピー

上記のコードでは、usernamepassword、および database_name を特定のデータベース ユーザー名、パスワード、データベース名に置き換える必要があります。このうち、tcp(127.0.0.1:3306)はローカルデータベースへの接続を示し、ポートは3306です。 charset=utf8mb4&parseTime=True&loc=Local は、utf8mb4 文字エンコーディングを使用し、時刻解析とローカル タイム ゾーンの保存をオンにすることを意味します。

  1. データ モデルの定義

データベース内のデータをより適切に管理するには、対応するデータ モデルを定義する必要があります。リチャージモジュールでは、アカウントデータモデルを定義する必要があります。

type Account struct {
    gorm.Model
    UserID int
    Balance float64
}
ログイン後にコピー

このデータ モデルでは、gorm.Model 構造埋め込みを使用して、IDCreatedAtUpdatedAt# 基本フィールドを取得します。 ## や DeletedAt など。同時に、このデータ モデルの UserID フィールドと Balance フィールドを定義します。

    リチャージ
リチャージ機能を実装するときは、最初にユーザー アカウントをクエリする必要があります。アカウントが存在しない場合は、作成する必要があります。次に、リチャージ金額を残高に追加します。最後に、更新されたデータをデータベースに保存します。

func Recharge(userID int, amount float64) error {
    account := Account{}
    res := DB.Where("user_id = ?", userID).First(&account)
    if res.Error != nil && res.Error != gorm.ErrRecordNotFound {
        return res.Error
    }
    if res.Error == gorm.ErrRecordNotFound {
        account.UserID = userID
        account.Balance = amount
        res = DB.Create(&account)
        if res.Error != nil {
            return res.Error
        }
    } else {
        account.Balance += amount
        res = DB.Save(&account)
        if res.Error != nil {
            return res.Error
        }
    }
    return nil
}
ログイン後にコピー

このリチャージ関数では、まず

DB.Where("user_id = ?", userID).First(&account) を通じてユーザー アカウントをクエリします。アカウントが存在しない場合は、新しいアカウントを作成します。存在しない場合は、ユーザー ID に基づいてアカウントをクエリし、リチャージ金額 amount をアカウント残高に追加します。最後に、DB.Save(&account) を通じて、更新されたデータをデータベースに保存します。

    控除
控除機能を実装する場合、口座残高が支払いに十分であるか、控除額が多いかなど、いくつかのデータ検証を実行する必要があります。ゼロよりも。データの検証に合格すると、控除額が残高から差し引かれ、データベースに保存されます。

func Deduct(userID int, amount float64) error {
    if amount <= 0 {
        return errors.New("invalid deduct amount")
    }

    account := Account{}
    res := DB.Where("user_id = ?", userID).First(&account)
    if res.Error != nil {
        return res.Error
    }

    if account.Balance-amount < 0 {
        return errors.New("insufficient balance")
    }

    account.Balance -= amount
    res = DB.Save(&account)
    if res.Error != nil {
        return res.Error
    }

    return nil
}
ログイン後にコピー
この控除関数では、まず控除額

amount がゼロより大きいことを確認します。次に、ユーザー アカウントを照会し、残高が控除をサポートするのに十分であるかどうかを判断します。最後に、残高から借方金額を差し引き、更新されたデータをデータベースに保存します。

3. 概要

この記事では、Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成する方法を紹介します。 GORM フレームワークを使用してデータベース内のデータを管理し、ユーザー アカウントのリチャージおよびデビット機能を実装するための具体的なコード例を提供します。もちろん、実際の開発では、必要に応じて対応する修正や拡張を行うこともできます。

以上がGo 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート