日本の東京に住んでいる私は、ホットコーヒーから冷たい飲み物、軽食まであらゆる自動販売機に囲まれています。これらの象徴的な機械からインスピレーションを得て、Go で自動販売機システムのデザインを構築することにしました。これは State パターンを使用する素晴らしい例であり、この種のプロジェクトにこれが非常に役立つ理由を詳しく説明します。
なぜ自動販売機なのか?
本物の自動販売機について考えてみましょう - 実際にはかなり複雑です。次のことが必要です:
- 製品とその数量を追跡します
- お金を扱う
- 十分な現金を入金していることを確認してください
- おやつをあげてください
- おつりを返却してください
さらに、どの状態にあるのか混乱することなく、これらすべてを実行する必要があります。
基本的な構成要素
まず、操作するための基本的な構造がいくつか必要でした。
商品と在庫
各商品には ID、名前、価格、数量があります。非常に簡単な内容:
type Product struct { ID int Name string Price float64 Quantity int }
在庫では、地図を使用してすべての製品を追跡します。次のことが可能です:
- 新商品を追加
- 商品を削除
- トランザクションを処理する (誰かが何かを購入するときなど)
- 商品が入手可能かどうかを確認してください
状態パターン: ここが素晴らしい理由
ここからが興味深いところです。自動販売機はさまざまな状態をとることができます:
- お金を待っています
- お金が挿入されました
- 選択された製品
- 調剤製品
各州はユーザーのアクションを異なる方法で処理する必要があります。お金を入れる前に商品を選ぶことはできないですよね?
私は 3 つの主要な状態を使用しました:
- MoneyInsertedState
- ProductSelectedState
- ProductDispensedState
各状態は次のインターフェイスを実装します:
type State interface { InsertMoney(amount float64) SelectProduct(product *Product) ReturnChange() DispenseProduct() }
すべてがどのように連携するか
コーラを買いたいとします:
まず、$2.00 を挿入します
- マシンは MoneyInsertedState です
- お金を記録します
- ProductSelectedState に切り替えます
あなたはコーラ ($1.50) を選択しました
- コーラの在庫があるかどうかを機械がチェックします
- 十分な金額を入金したことを確認します
- ProductDispensedState に移行します
機械がコーラを分配します
- 在庫を更新します
- $0.50 のお釣りを返します
- MoneyInsertedState に戻ります
私が追加した素晴らしい機能
- 在庫管理: 各製品は 3 個から始まります。売り切れになると、利用可能なオプションから自動的に削除されます。
- スマートな釣銭処理: 購入後、機械は常に正しい釣銭を計算して返します。
- エラー防止: 状態パターンは、十分なお金がない状態で商品を購入しようとする、在庫切れの商品を選択する、何かが分配されている間にお金を挿入するなどの奇妙な状況を防ぐのに役立ちます。
学んだこと
これを構築することでいくつかのことを学びました:
- 状態パターンは、明確で明確な状態を持つマシンに最適です
- Go のインターフェースにより、状態パターンの実装が非常にきれいになります
- 実際のアプリケーションでは、適切なエラー処理が非常に重要です
次は何ですか?
常に改善の余地があります。いくつかのアイデア:
- カード支払いのサポートを追加
- 表示システムを実装する
- 飲み物の温度監視を追加
- 再入荷用の管理インターフェースを作成する
完全なコードはここで示したものよりも詳細ですが、これらはコードを機能させるための主要な部分です。次のリポジトリで完全な実装を自由に確認してください:
テサルツリー
/
低レベル設計-golang
Golang での低レベルのシステム設計問題の解決策
Go での低レベルのシステム設計
Go での低レベル システム設計 リポジトリへようこそ!このリポジトリには、Go で実装されたさまざまな低レベルのシステム設計の問題とその解決策が含まれています。主な目的は、実際の例を通じてシステムの設計とアーキテクチャを実証することです。
目次
- 概要
- 駐車場システム
- エレベーターシステム
- 図書館管理システム
- 自動販売機システム
概要
低レベルのシステム設計には、システム アーキテクチャの中核概念を理解し、拡張性、保守性、効率性の高いシステムを設計することが含まれます。このリポジトリは、Go を使用したさまざまな問題やシナリオの解決策をカバーしようとします。
駐車場システム
このリポジトリの最初のプロジェクトは、駐車場システムです。このシステムは、車両を駐車および駐車解除できる駐車場をシミュレートします。以下を示します:
- 駐車場インスタンスを管理するためのシングルトン設計パターン。
- さまざまな種類の車両 (乗用車、トラックなど) を扱います。
- 複数のフロアにわたる駐車スペースの管理。
- 駐車車両の支払い処理
機能
…以上がシステム設計: Go で自動販売機を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、プロファイリングの有効化、データの収集、CPUやメモリの問題などの一般的なボトルネックの識別など、GOパフォーマンスを分析するためにPPROFツールを使用する方法について説明します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています

この記事では、コードのランタイム操作に使用されるGoの反射パッケージについて説明します。シリアル化、一般的なプログラミングなどに有益です。実行やメモリの使用量の増加、賢明な使用と最高のアドバイスなどのパフォーマンスコストについて警告します

この記事では、GOでテーブル駆動型のテストを使用して説明します。これは、テストのテーブルを使用して複数の入力と結果を持つ関数をテストする方法です。読みやすさの向上、重複の減少、スケーラビリティ、一貫性、および

この記事では、go.modを介してGOモジュールの依存関係の管理、仕様、更新、競合解決をカバーすることについて説明します。セマンティックバージョンや定期的な更新などのベストプラクティスを強調しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









