Maison > développement back-end > Golang > le corps du texte

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

PHPz
Libérer: 2024-02-10 14:27:09
avant
924 Les gens l'ont consulté

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!

source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!