Maison développement back-end Golang Implémentation Golang de la logique de négociation

Implémentation Golang de la logique de négociation

May 10, 2023 am 09:45 AM

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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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 :

  1. 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 // 结束时间
Copier après la connexion

}

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.

  1. 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 // 被邀请人列表
Copier après la connexion

}

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.

  1. Journal de négociation

type ChoppedLog struct {

ParticipantID   int     // 砍价者ID
ChoppedAmount   float32 // 砍价金额
ProductID   int     // 商品ID
CreatedTime time.Time // 砍价时间
Copier après la connexion

}

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 :

  1. 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,
}
Copier après la connexion

} 与 Participer à la bonne affaire

  1. Func (P rproduct) Join (participant
  2. Participant) Error {
R
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
Copier après la connexion
E

}

r

    Func (P *Product) INVITE (PARTICIPANTID, Invite DID int) error {
  1. 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
  2. }

Négociation réussie

    func (p *Product) Chop(participantID int) error {
  1. 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 connexion
    }

    Grâ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 ?
    1. 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 ?
    2. Pour les problèmes ci-dessus, nous devons également les traiter en fonction des besoins spécifiques de l'entreprise.
    3. 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Quelles sont les vulnérabilités de Debian OpenSSL Quelles sont les vulnérabilités de Debian OpenSSL Apr 02, 2025 am 07:30 AM

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.

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

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 ...

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

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. � ...

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

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, ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

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 ...

Comment spécifier la base de données associée au modèle de Beego ORM? Comment spécifier la base de données associée au modèle de Beego ORM? Apr 02, 2025 pm 03:54 PM

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 ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

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 ...

Méthode de surveillance postgresql sous Debian Méthode de surveillance postgresql sous Debian Apr 02, 2025 am 07:27 AM

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

See all articles