


Vivant à Tokyo, au Japon, je suis entouré de distributeurs automatiques proposant de tout, du café chaud aux boissons froides et aux collations. Inspiré par ces machines emblématiques, j'ai décidé de créer un système de distributeur automatique en Go. C'est un bon exemple d'utilisation du modèle State, et je vais expliquer pourquoi il est très utile pour ce type de projet.
Pourquoi un distributeur automatique ?
Pensez à un vrai distributeur automatique : c'est en fait assez complexe ! Il doit :
- Gardez une trace des produits et de leurs quantités
- Gérer l'argent
- Assurez-vous d'avoir mis suffisamment d'argent
- Donnez-vous votre collation
- Rendez votre monnaie
De plus, il doit faire tout cela sans se tromper quant à l'état dans lequel il se trouve.
Les éléments de base
Tout d'abord, j'avais besoin de quelques structures de base avec lesquelles travailler :
Produits et inventaire
Chaque produit a un identifiant, un nom, un prix et une quantité. Des trucs assez simples :
type Product struct { ID int Name string Price float64 Quantity int }
L'inventaire garde une trace de tous les produits à l'aide d'une carte. Il peut :
- Ajouter de nouveaux produits
- Supprimer des produits
- Gérer les transactions (comme lorsque quelqu'un achète quelque chose)
- Vérifiez si les produits sont disponibles
Le modèle d'État : pourquoi c'est génial ici
C'est ici que ça devient intéressant. Un distributeur automatique peut être dans différents états :
- En attente d'argent
- Argent inséré
- Produit sélectionné
- Produit de distribution
Chaque État doit gérer les actions des utilisateurs différemment. Par exemple, vous ne pouvez pas sélectionner un produit avant d'investir de l'argent, n'est-ce pas ?
J'ai utilisé trois états principaux :
- MoneyInsertedState
- ProductSelectedState
- ProductDispensedState
Chaque état implémente cette interface :
type State interface { InsertMoney(amount float64) SelectProduct(product *Product) ReturnChange() DispenseProduct() }
Comment tout cela fonctionne ensemble
Disons que vous voulez acheter un Coca :
Tout d'abord, vous insérez 2,00 $
- La machine est dans MoneyInsertedState
- Il enregistre votre argent
- Passe sur ProductSelectedState
Vous sélectionnez Coca (1,50 $)
- La machine vérifie si elle a du Coca en stock
- Vérifie que vous avez investi suffisamment d'argent
- Déplace vers ProductDispensedState
La machine distribue votre Coca
- Mises à jour de l'inventaire
- Renvoie votre monnaie de 0,50 $
- Retourne à MoneyInsertedState
Fonctionnalités intéressantes que j'ai ajoutées
- Gestion des stocks : Chaque produit commence par 3 unités. Lorsqu'un article est épuisé, il est automatiquement supprimé des options disponibles.
- Gestion intelligente de la monnaie : La machine calcule et renvoie toujours la monnaie correcte après un achat.
- Prévention des erreurs : le modèle d'état aide à éviter des situations étranges telles que tenter d'acheter des produits sans assez d'argent, sélectionner des produits en rupture de stock, insérer de l'argent pendant que quelque chose est en cours de distribution.
Ce que j'ai appris
Construire cela m'a appris quelques choses :
- Le modèle State est parfait pour les machines avec des états clairs et distincts
- Les interfaces de Go rendent la mise en œuvre des modèles d'état vraiment propre
- Une gestion appropriée des erreurs est extrêmement importante pour les applications du monde réel
Quelle est la prochaine étape ?
Il y a toujours place à l'amélioration ! Quelques idées :
- Ajouter la prise en charge des paiements par carte
- Mettre en place un système d'affichage
- Ajouter une surveillance de la température pour les boissons
- Créer une interface d'administration pour le réapprovisionnement
Le code complet est plus détaillé que ce que j'ai montré ici, mais ce sont les principaux éléments qui le font fonctionner. N'hésitez pas à vérifier l'implémentation complète dans le dépôt suivant :
l'arbre à sel
/
conception-golang de bas niveau
Solutions aux problèmes de conception de systèmes de bas niveau à Golang
Conception de systèmes de bas niveau dans Go
Bienvenue dans le référentiel Conception de systèmes de bas niveau dans Go ! Ce référentiel contient divers problèmes de conception de systèmes de bas niveau et leurs solutions implémentées dans Go. L'objectif principal est de démontrer la conception et l'architecture des systèmes à travers des exemples pratiques.
Table des matières
- Aperçu
- Système de stationnement
- Système d'ascenseur
- Système de gestion de bibliothèque
- Système de distributeur automatique
Aperçu
La conception de systèmes de bas niveau implique de comprendre les concepts fondamentaux de l'architecture système et de concevoir des systèmes évolutifs, maintenables et efficaces. Ce référentiel tentera de couvrir les solutions de divers problèmes et scénarios utilisant Go.
Système de stationnement
Le premier projet de ce référentiel est un Système de parking. Ce système simule un parking où les véhicules peuvent être garés et déchargés. Cela démontre :
- Modèle de conception Singleton pour la gestion de l'instance de parking.
- Manipulation de différents types de véhicules (par exemple, voitures, camions).
- Gestion des espaces de stationnement sur plusieurs étages.
- Traitement des paiements pour les véhicules stationnés.
Caractéristiques
…Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

La journalisation d'erreur d'application GO efficace nécessite d'équilibrer les détails et les performances. 1) L'utilisation de packages de journaux standard est simple mais manque de contexte. 2) Logrus fournit des journaux structurés et des champs personnalisés. 3) ZAP combine les performances et les journaux structurés, mais nécessite plus de paramètres. Un système de journalisation d'erreur complet doit inclure l'enrichissement des erreurs, le niveau de journal, la journalisation centralisée, les considérations de performances et les modes de gestion des erreurs.

Vide InterfacesIngoAreInterfaces avec des étages, représentant l'analyse de la valeur et devait être informé de la maintenance

Go'sconcurrencyModeLelisunieDuetOtsUseofgoroutinesandChannels, offrant auxquels l'offrand de poids et de la responsabilité approfondie axés

Go'sconcurrencyModeLuSeSGoroutinesandChannelStomageConCurrentProgrammingation efficace.1)

Interfaces andPolymorphisMingoenhanceCodeRelevitality andmainaipability.1) Définir les interfaces de théâtre.

TheinitfonctioningorunsautomAticalement pour que la façon dont la convention est en train

Les combinaisons d'interface créent des abstractions complexes dans la programmation GO en décomposant les fonctions en petites interfaces focalisées. 1) Définissez le lecteur, l'écrivain et les interfaces plus étroites. 2) Créez des types complexes tels que le fichier et le réseau de réseaux en combinant ces interfaces. 3) Utilisez la fonction ProcessData pour montrer comment gérer ces interfaces combinées. Cette approche améliore la flexibilité du code, la testabilité et la réutilisabilité, mais il faut prendre soin d'éviter une fragmentation excessive et une complexité combinatoire.

InitisctionsingoaReAutomAticalement compte tenu de la fin de la manière


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !
