Puffernde Kanäle in der Go-Programmierung

GolangGolangBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor zielt darauf ab, Ihr Verständnis von Pufferschannels in Golang zu testen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ConcurrencyGroup(["Concurrency"]) go/ConcurrencyGroup -.-> go/channels("Channels") subgraph Lab Skills go/channels -.-> lab-15456{{"Puffernde Kanäle in der Go-Programmierung"}} end

Channel Puffering

Standardmäßig sind Kanäle in Golang unpuffernd, was bedeutet, dass sie nur Sendevorgänge (chan <-) akzeptieren, wenn es einen entsprechenden Empfang (<- chan) gibt, der bereit ist, den gesendeten Wert zu empfangen. Puffernde Kanäle akzeptieren jedoch eine begrenzte Anzahl von Werten ohne einen entsprechenden Empfänger für diese Werte. In diesem Labor müssen Sie einen puffernden Kanal erstellen und Werte in den Kanal senden, ohne dass ein entsprechender paralleler Empfang erfolgt.

  • Grundkenntnisse von Golang-Kanälen
  • Verständnis von puffernden Kanälen
$ go run channel-buffering.go
puffernd
Kanal

Hier ist der vollständige Code:

// Standardmäßig sind Kanäle _unpuffernd_, was bedeutet, dass sie
// nur Sendevorgänge (`chan <-`) akzeptieren, wenn es einen
// entsprechenden Empfang (`<- chan`) gibt, der bereit ist, den
// gesendeten Wert zu empfangen. _Puffernde Kanäle_ akzeptieren
// eine begrenzte Anzahl von Werten ohne einen entsprechenden
// Empfänger für diese Werte.

package main

import "fmt"

func main() {

	// Hier `make` wir einen Kanal vom Typ string, der bis zu
	// 2 Werte puffernd speichert.
	messages := make(chan string, 2)

	// Da dieser Kanal puffernd ist, können wir diese
	// Werte in den Kanal senden, ohne dass ein entsprechender
	// paralleler Empfang erfolgt.
	messages <- "puffernd"
	messages <- "Kanal"

	// Später können wir diese beiden Werte wie üblich empfangen.
	fmt.Println(<-messages)
	fmt.Println(<-messages)
}

Zusammenfassung

In diesem Labor haben Sie gelernt, wie Sie in Golang einen puffernden Kanal erstellen und Werte in den Kanal senden, ohne dass ein entsprechender paralleler Empfang erfolgt. Dies ist nützlich in Szenarien, in denen Sie Werte an einen Kanal senden möchten, ohne den Sender zu blockieren.