Table des matières
Contenu de la question
Solution de contournement
Maison développement back-end Golang golang : comment définir une séquence d'étapes

golang : comment définir une séquence d'étapes

Feb 10, 2024 pm 02:27 PM

golang : comment définir une séquence détapes

l'éditeur php Banana vous présentera comment définir une séquence d'étapes dans Golang. Dans le développement de logiciels, il est souvent nécessaire d’effectuer une série d’opérations ou de tâches dans un certain ordre. Golang fournit un moyen concis et efficace de définir et d'exécuter des séquences d'étapes. En utilisant des goroutines et des canaux, nous pouvons exécuter plusieurs étapes simultanément et garantir qu'elles sont exécutées dans l'ordre spécifié. Dans cet article, nous allons explorer comment définir une séquence d'étapes et démontrer son utilisation à l'aide d'un exemple de code. Que vous soyez un débutant Golang ou un développeur expérimenté, cet article vous fournira de précieuses informations et des conseils pratiques. Nous allons jeter un coup d'oeil!

Contenu de la question

Je souhaite rédiger un test protocolaire. Mon idée actuelle est de définir une séquence d'étapes. Chaque étape comprend triggerexpectation - 例如触发 msga 并期望 msgb.

type series struct {
  steps []step
}
Copier après la connexion

Ce que je n'aime pas dans cela series 不明确:我必须按顺序创建切片,然后希望它永远不会混乱,并依赖它,或者 sort, c'est qu'il faut ensuite implémenter la fonction de tri, ce qui est totalement inutile.

Qu'est-ce qu'un bon design qui définit formellement series et le rend explicite de cette manière ?

Ma meilleure idée en ce moment est de créer une carte avec un int index :

type Series struct {
   Steps map[int]Step
}

series := Series{
   Steps: map[int]Step{
     0: Step{},
     1: Step{},
     2: Step{},
     ...
   }
}
Copier après la connexion

Une autre option pourrait être de créer vous-même une liste de liens. go Non implémenté (pour autant que je sache). C'était bizarre de devoir en construire un moi-même pour ça. Mais une telle solution perd aussi légèrement les fonctionnalités explicites : en gros, vous devez toujours parcourir la liste chaînée pour obtenir la séquence complète (par exemple "qu'est-ce que l'étape 4").

Solution de contournement

En plus d'utiliser une carte, vous pouvez toujours utiliser des tranches et utiliser Keying Texte composé :

var steps = []step{
    0: step{},
    1: step{},
    ...
}
Copier après la connexion

Spécification : Texte composé Description détaillée :

compositelit  = literaltype literalvalue .
literaltype   = structtype | arraytype | "[" "..." "]" elementtype |
                slicetype | maptype | typename [ typeargs ] .
literalvalue  = "{" [ elementlist [ "," ] ] "}" .
elementlist   = keyedelement { "," keyedelement } .
keyedelement  = [ key ":" ] element .
key           = fieldname | expression | literalvalue .
fieldname     = identifier .
element       = expression | literalvalue .
Copier après la connexion

Comme vous pouvez le voir, la partie keyedelement 可能包含可选的 key ":".

...La clé est interprétée comme nom de champ pour les littéraux de structure, index pour les littéraux de tableau et de tranche et clé pour les littéraux de carte.

Notez que vous pouvez mélanger des éléments avec et sans clé, et qu'ils ne doivent pas nécessairement être consécutifs. De plus, si une clé est manquante dans le littéral de tranche, l'index sera l'index précédent + 1.

type step struct{}

var steps = []*step{
    0:       &step{},
    1:       &step{},
    &step{}, // implicit index: 2
    5:       &step{},
}
fmt.println(steps)
Copier après la connexion

Sortie ci-dessus (essayez-la sur go terrain de jeu) :

[0x559008 0x559008 0x559008 <nil> <nil> 0x559008]
Copier après la connexion

Leurs clés peuvent également être "en panne", ce qui signifie que ceci est également valable :

var steps = []*Step{
    5:       &Step{},
    0:       &Step{},
    1:       &Step{},
    &Step{}, // implicit index: 2
}
Copier après la connexion

Cette sortie est la même. Essayez-le sur le go terrain de jeu.

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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

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)

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Mar 03, 2025 pm 05:22 PM

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment écrire des objets et des talons simulés pour les tests en Go? Comment écrire des objets et des talons simulés pour les tests en Go? Mar 10, 2025 pm 05:38 PM

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Mar 10, 2025 pm 05:36 PM

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

Comment rédigez-vous des tests unitaires en Go?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Mar 03, 2025 pm 05:18 PM

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment écrire des fichiers dans GO Language de manière pratique? Comment écrire des fichiers dans GO Language de manière pratique? Mar 03, 2025 pm 05:15 PM

Comment écrire des fichiers dans GO Language de manière pratique?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Mar 10, 2025 pm 03:20 PM

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

See all articles