Heim > Artikel > Backend-Entwicklung > Referenzdatentypen und Wertdatentypen in der Go-Sprache
Go-Sprache ist eine stark typisierte Sprache, in der Datentypen in zwei Typen unterteilt werden können: Referenzdatentypen und Wertdatentypen. Referenzdatentypen und Wertdatentypen unterscheiden sich geringfügig in der Verwendung. Schauen wir uns diese beiden Datentypen genauer an.
1. Referenzdatentypen
Zu den Referenzdatentypen in der Go-Sprache gehören Slices, Karten, Kanäle, Schnittstellen und Zeiger. Bei Referenzdatentypen ist der Wert einer Variablen nicht nur ihr eigener Wert, sondern ein Zeiger auf eine Speicheradresse. Wenn wir daher eine Variable vom Referenztyp deklarieren, wird ihr eine Speicheradresse zugewiesen und auf dem Stapel gespeichert, und der Speicherplatz, auf den die Speicheradresse zeigt, wird im Heap gespeichert.
Ein Slice ist ein dynamisches Array, das je nach Bedarf automatisch vergrößert oder verkleinert werden kann. Am Beispiel eines String-Slices lauten die Deklaration und Initialisierung wie folgt:
var s1 []string // Deklariere das Slice
s1 = make([]string, 3) // Initialisieren Sie mit der Make-Funktion Slice
s2 := []string{"foo", "bar", "baz"} // Deklarieren Sie das Slice direkt und initialisieren Sie es
In der Go-Sprache Ein Slice ist ein Zeiger auf die zugrunde liegenden Daten. Der Zeiger enthält sowohl die Länge als auch die Kapazität des Slice. Dies sind die Werte, die von den Funktionen len und cap zurückgegeben werden. Wenn die Anzahl der Elemente in einem Slice die Kapazität überschreitet, weist die Go-Sprache einen größeren Speicherplatz neu zu und kopiert dann die ursprünglichen Elemente in den neuen Speicherplatz.
Mapping ist eine ungeordnete Sammlung von Schlüssel-Wert-Paaren, die mithilfe des Schlüsselworts „map“ in der Go-Sprache definiert werden. Am Beispiel einer String-Zuordnung lauten die Deklaration und Initialisierung wie folgt:
m1 := make(map[string]int) // Verwenden Sie die Make-Funktion, um die Zuordnung
m2 zu initialisieren := map[string] int{"foo": 1, "bar": 2, "baz": 3} // Deklarieren Sie das Mapping direkt und initialisieren Sie es
In der Go-Sprache das Mapping ist auch ein Zeiger auf die zugrunde liegenden Daten. Enthält die Anzahl der zugeordneten Elemente. Wenn die Anzahl der Elemente in der Karte die zugrunde liegende Speicherkapazität überschreitet, weist die Go-Sprache einen größeren Speicherplatz neu zu.
Channel ist eine Möglichkeit, Daten zwischen mehreren Ctrips zu übertragen, indem die make-Funktion verwendet wird und der <-Operator einen Kanal deklariert. Am Beispiel eines String-Kanals lauten die Deklaration und Initialisierung wie folgt:
var ch1 chan string // Deklarieren Sie den Kanal
ch1 = make(chan string) // Verwenden Sie die make-Funktion um den Kanal zu initialisieren #🎜🎜 #ch2 := make(chan string, 3) // Verwenden Sie die Make-Funktion, um den gepufferten Kanal zu initialisieren
ch1 <- "foo" // Daten an den Kanal senden #🎜🎜 #data := <-ch1 // Daten vom Kanal lesen
In der Go-Sprache ist der Kanal auch ein Zeiger auf die zugrunde liegenden Daten, einschließlich der Kapazität des Kanals und der aktuellen Anzahl Elemente. Wenn die Anzahl der Elemente im Kanal die Kapazität überschreitet, blockiert die Go-Sprache den aktuellen Ctrip und wartet darauf, dass andere Ctrips die Elemente wegnehmen.
type Caller interface {
Call() bool}
In the Go In der Sprache ist die Schnittstelle auch ein Zeiger auf die zugrunde liegenden Daten und zeigt auf die Struktur bei der Implementierung dieser Schnittstelle. Schnittstellen sind schneller als Werttypen, da Schnittstellenmethoden nicht durch Implementierungsvorgänge kopiert werden.
var p1 *string // Zeiger deklarieren
s1 := "foo"p1 = &s1 // Den Zeiger auf die Speicheradresse der String-Variablen richten
fmt.Println("s1:", s1, "p1:", *p1) // Den Wert der String-Variablen über den Zeiger abrufen
#🎜 🎜#In der Go-Sprache muss die Variable, auf die der Zeiger zeigt, im Voraus deklariert werden. In der Go-Sprache gibt es keinen ähnlichen Zeigeroperator wie in der C-Sprache.
Boolescher Typ
Ganzzahltyp
Gleitkommatyp
Pluraltyp
Zeichentyp
String ist eine schreibgeschützte Zeichenfolge in der Go-Sprache, und doppelte Anführungszeichen werden verwendet, um Zeichenfolgen in der Go-Sprache darzustellen. Zeichenfolgen in der Go-Sprache sind UTF-8-codiert.
Array ist ein Datentyp mit fester Länge und demselben Elementtyp in der Go-Sprache. Wenn Sie es verwenden, müssen Sie die Länge und den Elementtyp des Arrays im Voraus deklarieren.
Fazit
Referenzdatentypen und Wertdatentypen unterscheiden sich in der Verwendung in der Go-Sprache geringfügig. Durch Vergleich kann festgestellt werden, dass Wertdatentypen im Stapel gespeichert sind Variablen befinden sich im Speicher. Die Position in einer Variablen ändert sich im Laufe der Zeit nicht (wenn keine Zeigeroperationen verwendet werden), während der Wert einer Referenzdatentypvariablen ein Zeiger auf eine im Heap zugewiesene Speicheradresse ist. Bei der tatsächlichen Verwendung sollten Referenzdatentypen und Wertdatentypen rational verwendet werden, um optimale Leistung und Wirkung zu erzielen.
Das obige ist der detaillierte Inhalt vonReferenzdatentypen und Wertdatentypen in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!