Heim  >  Artikel  >  Backend-Entwicklung  >  Referenzdatentypen und Wertdatentypen in der Go-Sprache

Referenzdatentypen und Wertdatentypen in der Go-Sprache

PHPz
PHPzOriginal
2023-06-01 09:12:11793Durchsuche

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.

  1. Slice

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.

  1. Mapping

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.

  1. Channel

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.

Schnittstelle
  1. Eine Schnittstelle ist ein Datentyp, der eine Reihe von Schnittstellenmethoden definiert. Am Beispiel einer einfachen Schnittstelle lautet die Deklaration wie folgt:

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.

Zeiger
  1. Ein Zeiger ist eine Variable, die eine Speicheradresse enthält, die in der Go-Sprache zum Deklarieren und Verwenden verwendet wird Hinweise. Nehmen Sie als Beispiel einen Zeiger auf eine Variable vom Typ String, deklarieren und verwenden Sie ihn wie folgt:

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.

2. Wertdatentypen

Zu den Wertdatentypen in der Go-Sprache gehören Boolescher Wert, Ganzzahl, Gleitkomma, Komplex, Zeichen, Zeichenfolge und Array. Bei Variablen vom Typ Wert werden der Wert der Variablen und die Variable selbst auf dem Stapel gespeichert.

Boolescher Typ

  1. Der boolesche Typ hat in der Go-Sprache nur zwei Werte: wahr und falsch. Da der boolesche Typ nur ein Byte hat, kann er den Speicherbedarf bei Verwendung in großen Mengen effektiv reduzieren.

Ganzzahltyp

  1. Der Ganzzahltyp der Go-Sprache ist in vorzeichenbehaftete Ganzzahltypen und vorzeichenlose Ganzzahltypen in int8 unterteilt , int16, int32 und int64, vorzeichenlose Ganzzahltypen werden in uint8, uint16, uint32 und uint64 unterteilt. Bei der Verwendung wird empfohlen, so oft wie möglich die Typen int und uint zu verwenden, da die Bytebreite dieser beiden Typen auf verschiedenen Plattformen gleich ist.

Gleitkommatyp

  1. Der Gleitkommatyp der Go-Sprache ist in zwei Typen unterteilt: float32 und float64. Der Standardtyp ist float64. Bei der Verwendung wird empfohlen, wann immer möglich den Typ float64 zu verwenden, da die Berechnungsgeschwindigkeit und -genauigkeit dieses Typs höher ist als die des Typs float32.

Pluraltyp

  1. Der komplexe Zahlentyp verwendet die Typen complex64 und complex128 in der Go-Sprache, um reelle und imaginäre Zahlen darzustellen. Beispielsweise gibt der Typ complex64 an, dass sowohl der Realteil als auch der Imaginärteil komplexe Zahlen vom Typ float32 sind.

Zeichentyp

  1. Der Zeichentyp wird in der Go-Sprache durch Runen dargestellt. Der Bereich der Runentyp- und Int32-Typidentifikation ist derselbe. In der Go-Sprache können Sie einfache Anführungszeichen verwenden, um Zeichen darzustellen.
    1. String

    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.

    1. Array

    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!

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