Heim >Backend-Entwicklung >Golang >Können Go-Kanäle mehrere Datentypen verarbeiten?

Können Go-Kanäle mehrere Datentypen verarbeiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 13:55:30286Durchsuche

Can Go Channels Handle Multiple Data Types?

Typ-agnostische Kanäle in Go

Frage:

Ist das in Go möglich? mehrere Datentypen über einen einzigen Kanal senden?

Beispiel:

Der folgende Code versucht, verschiedene Datentypen über einen Kanal zu senden: http://play.golang. org/p/7p2Bd6b0QT.

Antwort:

Ja, es ist möglich, typunabhängige Kanäle in Go zu erstellen. Um mehrere Typen über einen Kanal zu senden, verwenden Sie:

greet := make(chan pet)

Mit dieser Änderung können Sie jeden Typ senden, der die Pet-Schnittstelle implementiert.

Generische Daten senden:

Wenn Sie vollständig generische Daten senden müssen, erstellen Sie einen Kanal vom Typ Chan-Schnittstelle{} und verwenden Sie Reflektion, um die Art der empfangenen Daten zu bestimmen.

Beispiel:

ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}()

ch <- "this is it"

Verwenden eines Typschalters:

Alternativ zur Reflexion können Sie einen Typschalter mit einer Select-Anweisung wie dieser verwenden:

p := <-ch
switch p := p.(type) {
case string:
    fmt.Printf("Got a string %q", p)
default:
    fmt.Printf("Type of p is %T. Value %v", p, p)
}

Das obige ist der detaillierte Inhalt vonKönnen Go-Kanäle mehrere Datentypen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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