Heim > Backend-Entwicklung > Golang > Ist der Kanaltyp von Go unabhängig?

Ist der Kanaltyp von Go unabhängig?

Linda Hamilton
Freigeben: 2024-11-04 13:00:29
Original
641 Leute haben es durchsucht

Is Go's Channel Type Agnostic?

Typunabhängige Kanäle in Go

Frage:

Können mehrere unterschiedliche Datentypen gesendet werden? über einen einzelnen generischen Kanal in Go?

Antwort:

Ja, das ist möglich. Anhand eines Beispiels in einem Playground-Link kann ein Kanal mit der folgenden Syntax erstellt werden:greet: make(chan pet); dann kann jeder Typ, der die Pet-Schnittstelle implementiert, nahtlos über diesen Kanal gesendet werden.

Um vollständige Typagnostizismus zu erreichen, kann ein Kanal vom Typ Chan-Schnittstelle{} verwendet werden. Beim Empfang eines Werts von einem solchen Kanal kann Reflexion eingesetzt werden, um seinen Typ zu bestimmen.

Beispiel:

Ein vereinfachtes Beispiel (wenn auch möglicherweise nicht idiomatisch), das dieses Konzept demonstriert :

<code class="go">ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}()
ch <- "this is it"</code>
Nach dem Login kopieren

Verbessertes Beispiel:

Ein alternativer Ansatz, der von BurntSushi5 vorgeschlagen wird, verwendet einen Typschalter:

<code class="go">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)
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonIst der Kanaltyp von Go unabhängig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage