Werden Kanäle in Go als Wert oder Referenz übergeben?

Barbara Streisand
Freigeben: 2024-11-25 22:30:12
Original
937 Leute haben es durchsucht

Are Channels Passed by Value or Reference in Go?

Werden Kanäle standardmäßig als Referenz übergeben?

In Go erstellt die integrierte Funktion make Instanzen von Slices, Maps und Kanälen . Diese Typen werden nicht direkt als Referenz übergeben, verhalten sich aber technisch gesehen aufgrund der Speicherzuweisung auf dem Heap während ihrer Initialisierung als solche.

Das folgende Kanalbeispiel veranschaulicht dieses Verhalten:

package main

import "fmt"

func sum(a []int, c chan int) {
    sum := 0
    for _, v := range a {
        sum += v
    }
    c <- sum
}

func main() {
    a := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)
    go sum(a[:len(a)/2], c)
    go sum(a[len(a)/2:], c)
    x, y := <-c, <-c

    fmt.Println(x, y, x+y)
}
Nach dem Login kopieren

In diesem Beispiel wird der Kanal c mit make initialisiert, wodurch ein referenzähnliches Verhalten entsteht. Alle innerhalb der Summenfunktion an c vorgenommenen Änderungen bleiben bestehen, nachdem die Funktion beendet wurde.

Dieses Verhalten wird in der Go-Spezifikation näher erläutert:

Die integrierte Funktion make benötigt einen Typ T, der muss ein Slice-, Map- oder Channel-Typ sein, optional gefolgt von einer typspezifischen Liste von Ausdrücken. Es gibt einen Wert vom Typ T (nicht *T) zurück. Die Initialisierung des Speichers erfolgt wie im Abschnitt „Initial“ beschrieben Werte上是按值传递的.这使得它们可以传递给函数并允许写入或读取,类似于指针的行为.

Das obige ist der detaillierte Inhalt vonWerden Kanäle in Go als Wert oder Referenz übergeben?. 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