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

Ist der Kanaltyp von Go unabhängig?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 13:00:29644Durchsuche

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>

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>

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!

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