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.
- 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.
- 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.
- 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.
- 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.
- 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.
Boolescher Typ
- 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
- 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
- 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
- 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
- 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.
- String
- Array
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...
