Maison >développement back-end >Golang >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!
Je souhaite rédiger un test protocolaire. Mon idée actuelle est de définir une séquence d'étapes. Chaque étape comprend trigger
和 expectation
- 例如触发 msga
并期望 msgb
.
type series struct { steps []step }
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{}, ... } }
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").
En plus d'utiliser une carte, vous pouvez toujours utiliser des tranches et utiliser Keying Texte composé :
var steps = []step{ 0: step{}, 1: step{}, ... }
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 .
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)
Sortie ci-dessus (essayez-la sur go terrain de jeu) :
[0x559008 0x559008 0x559008 <nil> <nil> 0x559008]
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 }
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!