テイクアウト市場がますます成熟するにつれて、家庭料理が多くの家庭の夕食の第一選択となっています。宅配調理サービスのプロバイダーとして、信頼できるユーザー アカウントへのリチャージを提供することが不可欠です。この記事では、Go 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成する方法を紹介します。
1. 設計
再充電モジュールを設計するときは、次の点を考慮する必要があります:
リチャージモジュールでは、リチャージの前後にユーザーの残高を保存する必要があります。したがって、次のデータ構造を使用できます:
type Account struct { UserID int Balance float64 }
ここでは、UserID
を使用してユーザーを識別し、Balance
を使用してそのアカウント残高を保存します。
ユーザー リチャージ モジュールでは、次の関数を実装する必要があります:
同じトランザクションに複数のアカウント操作が含まれる可能性があることを考慮して、トランザクション管理データベース操作を使用することをお勧めします。
2. 実装
特定の実装では、GORM などの Go 言語によって提供される ORM フレームワークを使用できます。
GORM を Go 言語でインストールすると非常に便利です。ターミナルで次のコマンドを実行するだけです:
go get -u github.com/jinzhu/gorm
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)) }
上記のコードでは、username
、password
、および database_name
を特定のデータベース ユーザー名、パスワード、データベース名に置き換える必要があります。このうち、tcp(127.0.0.1:3306)
はローカルデータベースへの接続を示し、ポートは3306です。 charset=utf8mb4&parseTime=True&loc=Local
は、utf8mb4 文字エンコーディングを使用し、時刻解析とローカル タイム ゾーンの保存をオンにすることを意味します。
データベース内のデータをより適切に管理するには、対応するデータ モデルを定義する必要があります。リチャージモジュールでは、アカウントデータモデルを定義する必要があります。
type Account struct { gorm.Model UserID int Balance float64 }
このデータ モデルでは、gorm.Model
構造埋め込みを使用して、ID
、CreatedAt
、UpdatedAt# 基本フィールドを取得します。 ## や
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 がゼロより大きいことを確認します。次に、ユーザー アカウントを照会し、残高が控除をサポートするのに十分であるかどうかを判断します。最後に、残高から借方金額を差し引き、更新されたデータをデータベースに保存します。
以上がGo 言語を使用して、訪問調理システムのユーザー アカウント リチャージ モジュールを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。