Golang: So definieren Sie die Schrittfolge

PHPz
Freigeben: 2024-02-10 14:27:09
nach vorne
926 Leute haben es durchsucht

Golang: So definieren Sie die Schrittfolge

Der PHP-Editor Banana stellt Ihnen vor, wie Sie eine Schrittsequenz in Golang definieren. Bei der Softwareentwicklung ist es häufig erforderlich, eine Reihe von Vorgängen oder Aufgaben in einer bestimmten Reihenfolge auszuführen. Golang bietet eine prägnante und effiziente Möglichkeit, Schrittfolgen zu definieren und auszuführen. Durch die Verwendung von Goroutinen und Kanälen können wir mehrere Schritte gleichzeitig ausführen und sicherstellen, dass sie in der angegebenen Reihenfolge ausgeführt werden. In diesem Artikel erfahren Sie, wie Sie eine Abfolge von Schritten definieren und deren Verwendung anhand von Beispielcode demonstrieren. Egal, ob Sie ein Golang-Anfänger oder ein erfahrener Entwickler sind, dieser Artikel liefert Ihnen wertvolle Informationen und praktische Tipps. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich möchte einen Protokolltest schreiben. Meine aktuelle Idee ist es, eine Abfolge von Schritten zu definieren. Jeder Schritt beinhaltet triggerexpectation - 例如触发 msga 并期望 msgb.

type series struct {
  steps []step
}
Nach dem Login kopieren

Was mir daran nicht gefällt series 不明确:我必须按顺序创建切片,然后希望它永远不会混乱,并依赖它,或者 sort ist, dass es dann noch die Sortierfunktion implementieren muss, was völlig unnötig ist.

Was ist ein gutes Design, das series formal definiert und auf diese Weise deutlich macht?

Meine beste Idee im Moment ist, eine Karte mit einem int Index zu erstellen:

type Series struct {
   Steps map[int]Step
}

series := Series{
   Steps: map[int]Step{
     0: Step{},
     1: Step{},
     2: Step{},
     ...
   }
}
Nach dem Login kopieren

Eine andere Möglichkeit könnte darin bestehen, sich eine Linkliste zu erstellen. go Nicht implementiert (soweit ich weiß). Es fühlte sich seltsam an, dafür selbst eines bauen zu müssen. Allerdings verliert eine solche Lösung auch ein wenig an expliziter Funktionalität: Grundsätzlich muss man immer die verknüpfte Liste durchsuchen, um die gesamte Sequenz zu erhalten (z. B. „Was ist Schritt 4“).

Problemumgehung

Zusätzlich zur Verwendung einer Karte können Sie weiterhin Slices verwenden und Keying Zusammengesetzten Text verwenden:

var steps = []step{
    0: step{},
    1: step{},
    ...
}
Nach dem Login kopieren

Spezifikation: Zusammengesetzter Text Detaillierte Beschreibung:

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 .
Nach dem Login kopieren

Wie Sie sehen können, der keyedelement 可能包含可选的 key ":"-Teil.

...Der Schlüssel wird als Feldname für Strukturliterale, Index für Array- und Slice-Literale und Schlüssel für Kartenliterale interpretiert.

Beachten Sie, dass Sie verschlüsselte und „nicht verschlüsselte“ Elemente mischen können und diese nicht aufeinanderfolgend sein müssen. Wenn außerdem ein Schlüssel im Slice-Literal fehlt, ist der Index der vorherige Index + 1.

type step struct{}

var steps = []*step{
    0:       &step{},
    1:       &step{},
    &step{}, // implicit index: 2
    5:       &step{},
}
fmt.println(steps)
Nach dem Login kopieren

Ausgabe oben (versuchen Sie es auf Go Playground):

[0x559008 0x559008 0x559008 <nil> <nil> 0x559008]
Nach dem Login kopieren

Ihre Schlüssel können auch „außer Betrieb“ sein, d.h. das gilt auch:

var steps = []*Step{
    5:       &Step{},
    0:       &Step{},
    1:       &Step{},
    &Step{}, // implicit index: 2
}
Nach dem Login kopieren

Diese Ausgabe ist die gleiche. Probieren Sie es auf dem Go-Spielplatz aus.

Das obige ist der detaillierte Inhalt vonGolang: So definieren Sie die Schrittfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!