Implémentation Golang de la logique de négociation
Les activités de négociation sont une forme de promotion populaire dans le commerce électronique et les plateformes sociales. Les participants peuvent obtenir des prix préférentiels pour des marchandises en marchandant dans un certain laps de temps. Toutefois, la mise en œuvre d’une logique de négociation des prix n’est pas simple et des questions telles que les relations entre les participants et le contrôle des prix doivent être prises en considération.
Cet article expliquera comment utiliser Golang pour mettre en œuvre une logique de négociation de prix.
1. La logique de base de la négociation
La logique de base de la négociation peut être résumée comme suit :
- Créer une activité de négociation : l'initiateur de l'événement sélectionne un produit, fixe le prix initial et la période de négociation, et invite d'autres personnes à participer. en négociation.
- Participer aux négociations : les participants à l'événement réduisent le prix des marchandises en lançant des négociations. La fourchette de négociation est déterminée aléatoirement par le système, mais ne sera pas inférieure à une valeur minimale.
- Partager la négociation : les participants peuvent inviter davantage de personnes à participer à la négociation et augmenter leurs opportunités de négociation en partageant des liens de négociation.
- Négociation réussie : lorsque le prix du produit descend à un certain niveau, la négociation est considérée comme réussie et l'utilisateur peut obtenir les remises correspondantes.
2. Golang implémente la logique de négociation
Nous allons maintenant présenter comment utiliser Golang pour mettre en œuvre la logique de négociation. Nous devons d'abord définir quelques structures de données :
- Product information
type Product struct {
ID int // 商品ID Name string // 商品名称 OriginalPrice float32 // 商品原价 CurrentPrice float32 // 当前价格 MinPriceDelta float32 // 最小砍价幅度 MinPrice float32 // 最低价格 Participants map[int]*Participant // 参与者列表 ChoppedLogs map[int]float32 // 砍价日志 StartTime time.Time // 开始时间 EndTime time.Time // 结束时间
}
Parmi elles, Participants représente la liste des participants, ChoppedLogs enregistre l'étendue de chaque négociation par l'utilisateur et StartTime et EndTime représentent le cycle des prix.
- Informations sur le participant
type Participant struct {
ID int // 参与者ID Name string // 参与者名称 AmountChopped float32 // 已砍金额 JoinedTime time.Time // 加入时间 InviterID int // 邀请者ID ProductID int // 商品ID Invited []*Participant // 被邀请人列表
}
Dans les informations sur le participant, AmountChopped indique le montant que le participant a coupé dans le produit actuel, InviterID enregistre l'ID de l'invitant et Invited enregistre l'invité liste de ceux-ci.
- Journal de négociation
type ChoppedLog struct {
ParticipantID int // 砍价者ID ChoppedAmount float32 // 砍价金额 ProductID int // 商品ID CreatedTime time.Time // 砍价时间
}
Dans le journal de négociation, l'identifiant du négociateur, le montant de la négociation, l'identifiant du produit et le temps de négociation sont enregistrés.
Avec la définition ci-dessus, nous pouvons écrire la logique de négociation suivante :
- Créer une activité de négociation
func NewProduct(name string, originalPrice, minPriceDelta, minPrice float32, startTime, endTime time.Time) *Product {
return &Product{ Name: name, OriginalPrice: originalPrice, CurrentPrice: originalPrice, MinPriceDelta: minPriceDelta, MinPrice: minPrice, Participants: make(map[int]*Participant), ChoppedLogs: make(map[int]float32), StartTime: startTime, EndTime: endTime, }
} 与 Participer à la bonne affaire
- Func (P rproduct) Join (participant Participant) Error {
if participant.JoinedTime.Before(p.StartTime) || participant.JoinedTime.After(p.EndTime) { return fmt.Errorf("参与时间错误") } if p.CurrentPrice <= p.MinPrice { return fmt.Errorf("价格已经到达最低价,不能再砍价了。") } id := len(p.Participants) + 1 participant.ID = id participant.ProductID = p.ID p.Participants[id] = participant return nil
}
r- Func (P *Product) INVITE (PARTICIPANTID, Invite DID int) error {
-
if _, ok := p.Participants[participantID]; !ok { return fmt.Errorf("该用户未参加本次砍价活动") } if _, ok := p.Participants[invitedID]; !ok { return fmt.Errorf("该用户未在砍价活动中") } if participantID == invitedID { return fmt.Errorf("不允许自己邀请自己") } p.Participants[participantID].Invited = append(p.Participants[participantID].Invited, p.Participants[invitedID]) p.Participants[invitedID].InviterID = participantID return nil
Copier après la connexion}
- func (p *Product) Chop(participantID int) error {
- }
if _, ok := p.Participants[participantID]; !ok { return fmt.Errorf("该用户未参加本次砍价活动") } if p.CurrentPrice <= p.MinPrice { return fmt.Errorf("提前到达底价,不能再砍价了。") } num := rand.Intn(10) // 随机砍价幅度 chopAmount := p.MinPriceDelta + float32(num) if chopAmount >= p.CurrentPrice-p.MinPrice { chopAmount = p.CurrentPrice - p.MinPrice } p.CurrentPrice -= chopAmount p.Participants[participantID].AmountChopped += chopAmount p.ChoppedLogs[participantID] = chopAmount if p.CurrentPrice <= p.MinPrice { p.CurrentPrice = p.MinPrice } return nil
Copier après la connexionGrâce au code ci-dessus, nous pouvons implémenter une logique de négociation de base, y compris des opérations de base telles que la création d'activités de négociation , participer aux négociations, partager les négociations et les succès des négociations. Cependant, ces codes sont loin de répondre aux besoins d'applications pratiques, car nous devons également considérer les questions suivantes :
Comment empêcher certains utilisateurs d'obtenir le prix le plus bas grâce à des négociations malveillantes ? Comment contrôler la fourchette de négociation pour que le prix fluctue dans une fourchette raisonnable ?- Comment concevoir des règles de négociation et un mécanisme d'invitation afin que les activités de négociation puissent attirer davantage d'utilisateurs à participer ?
- Pour les problèmes ci-dessus, nous devons également les traiter en fonction des besoins spécifiques de l'entreprise.
- 3. Résumé
La mise en œuvre de la logique de négociation via Golang peut nous permettre de mieux comprendre les principes de mise en œuvre des activités de négociation. Cependant, dans le développement réel, nous devons également prendre en compte d'autres problèmes, tels que le traitement simultané, la prévention des commandes frauduleuses, etc. Ces problèmes nous obligent également à traiter des scénarios commerciaux spécifiques. Je crois qu'avec une pratique continue, nous pouvons progressivement maîtriser les compétences de mise en œuvre des activités de négociation et apporter une plus grande contribution au développement du commerce électronique et des plateformes sociales.
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!

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

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

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

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

OpenSSL, en tant que bibliothèque open source largement utilisée dans les communications sécurisées, fournit des algorithmes de chiffrement, des clés et des fonctions de gestion des certificats. Cependant, il existe des vulnérabilités de sécurité connues dans sa version historique, dont certaines sont extrêmement nocives. Cet article se concentrera sur les vulnérabilités et les mesures de réponse communes pour OpenSSL dans Debian Systems. DebianopenSSL CONNUTS Vulnérabilités: OpenSSL a connu plusieurs vulnérabilités graves, telles que: la vulnérabilité des saignements cardiaques (CVE-2014-0160): cette vulnérabilité affecte OpenSSL 1.0.1 à 1.0.1F et 1.0.2 à 1.0.2 Versions bêta. Un attaquant peut utiliser cette vulnérabilité à des informations sensibles en lecture non autorisées sur le serveur, y compris les clés de chiffrement, etc.

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Dans le cadre du cadre de beegoorm, comment spécifier la base de données associée au modèle? De nombreux projets Beego nécessitent que plusieurs bases de données soient opérées simultanément. Lorsque vous utilisez Beego ...

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Cet article présente une variété de méthodes et d'outils pour surveiller les bases de données PostgreSQL sous le système Debian, vous aidant à saisir pleinement la surveillance des performances de la base de données. 1. Utilisez PostgreSQL pour reprendre la surveillance Afficher PostgreSQL lui-même offre plusieurs vues pour surveiller les activités de la base de données: PG_STAT_ACTIVITY: affiche les activités de la base de données en temps réel, y compris les connexions, les requêtes, les transactions et autres informations. PG_STAT_REPLIcation: surveille l'état de réplication, en particulier adapté aux grappes de réplication de flux. PG_STAT_DATABASE: Fournit des statistiques de base de données, telles que la taille de la base de données, les temps de validation / recul des transactions et d'autres indicateurs clés. 2. Utilisez l'outil d'analyse de journaux pgbadg
